C#通过DSOFile读取与修改文件的属性
搜了一圈用C#读取与修改文件属性的文章,结果几乎找不到- -;
偶然间看到一个DSOFile工具,然后找到了对该工具进行详细讲解的一篇文章:《DSOfile,一个修改windows系统文件摘要的好东东。》,但是这里面的代码根本没法在C#的Console Application项目下直接用啊!所以一边摸索一边理解,一边写下这篇文章,给大家一点参考。
首先,下载DSOFile.dll文件,解压后在项目中引用它。这个文件是我从官网下载地址(点此打开)搬运过来的,上次更新居然是在十年前,也就是2007年更新的。
然后就开始一边码代码一边讲解了!
1.读取与设置预设属性
DSOFile内置了很多常用属性值,在此不一一列举,你可以自己亲自去查看。
OleDocumentProperties file=new OleDocumentProperties();//创建一个DSOFile对象
file.Open(@"D:\test.txt");//打开本地文件
file.SummaryProperties.Author = "Young";//设置作者的名字
file.Save();//保存更改,注意,千万不能忘了这行代码
Console.WriteLine(file.SummaryProperties.Author);//读取输出刚刚的更改
file.Close();
其中,DSOFile的好处在于,如果你尝试输出一个非幻灯片文件的SlideCount等属性,它并不会产生错误,而是显示为0。
2.添加自定义属性值
OleDocumentProperties file=new OleDocumentProperties();//创建一个DSOFile对象
file.Open(@"D:\test.txt");//打开本地文件
file.CustomProperties.Add("TestKey", "TestValue");//添加自定义属性以及其属性值
file.Save();//保存更改,注意,千万不能忘了这行代码
Console.WriteLine(file.CustomProperties[].Name);//读取输出刚刚的添加
file.Close();
必须知道的是,对于一个文件,一个自定义属性只能Add一次,也就是说,第二次运行上面的代码就会报错。所以当你添加自定义属性前一定要先判断是否已经存在该属性。
然而我并没有在DSOFile中找到判断属性是否存在的相关方法,而且也无法通过foreach来遍历它的所有自定义属性(如果有误,欢迎指出),所以我自己写了一个:
/// <summary>
/// 检测该文件属性中是否已经存在指定的自定义属性key
/// </summary>
/// <param name="file">本地的文件</param>
/// <param name="key">自定义的key</param>
/// <returns>存在key返回true,不存在key返回false</returns>
private static bool PropContains(OleDocumentProperties file,string key)
{
//由于不能直接foreach,所以用了for循环
for (int i = ; i < file.CustomProperties.Count; i++)
{
if (file.CustomProperties[i].Name==key)
{
return true;
}
}
return false;
}
3.修改自定义属性值
/// <summary>
/// 修改自定义属性的属性值
/// </summary>
/// <param name="file">本地的文件</param>
/// <param name="key">自定义的key</param>
/// <returns>修改成功返回true,不成功返回false</returns>
private static bool PropChange(OleDocumentProperties file, string key, string value)
{
//由于不能直接foreach,所以用了for循环
for (int i = ; i < file.CustomProperties.Count; i++)
{
if (file.CustomProperties[i].Name == key)
{
file.CustomProperties[i].set_Value(value);//为指定自定义属性修改值
file.Save();
return true;
}
}
return false;
}
4.删除自定义属性
同上面思路一样,通过循环找到对应的属性,然后将其删除。代码如下:
file.CustomProperties[i].Remove();
根据测试,删除操作不用执行file.Save();
这就是DSOFile的简介,有不对的地方欢迎在评论去指出交流~
==========2017/9/22更新==========
发现自定义属性超级容易丢失= =;
目前在以下几种情况下属性会丢失:
1.当把文件通过网页上传至服务器端,server端将获取到的文件流保存为云端文件,发现属性丢失
解释:server端获取到的文件流,其实只是文件内的内容,所以自然不包含自定义的属性值
参考:Use C#'s fileStream to save file will lose the file's attribute
2.通过ftp上传,发现属性丢失
3.用编辑器编辑,发现属性丢失
说明:目前只测试过txt格式文件。
把设置了属性的txt文件用windows自带的记事本软件编辑并保存,发现属性还在
用VS Code编辑该文件并保存,发现属性丢失
C#通过DSOFile读取与修改文件的属性的更多相关文章
- 背水一战 Windows 10 (87) - 文件系统: 获取文件的属性, 修改文件的属性, 获取文件的缩略图
[源码下载] 背水一战 Windows 10 (87) - 文件系统: 获取文件的属性, 修改文件的属性, 获取文件的缩略图 作者:webabcd 介绍背水一战 Windows 10 之 文件系统 获 ...
- [sharepoint]rest api文档库文件上传,下载,拷贝,剪切,删除文件,创建文件夹,修改文件夹属性,删除文件夹,获取文档列表
写在前面 最近对文档库的知识点进行了整理,也就有了这篇文章,当时查找这些接口,并用在实践中,确实废了一些功夫,也为了让更多的人走更少的弯路. 系列文章 sharepoint环境安装过程中几点需要注意的 ...
- DOM读取和修改节点对象属性
一.获取和修改元素间的内容(3种) 1.innerHTML 获得/设置元素开始标签和结束标签之间的html原文 固定套路:1.删除父元素下所有子元素:parent.innerHTML="&q ...
- C#/.NET 读取或修改文件的创建时间和修改时间
手工在博客中添加 Front Matter 文件头可是个相当费事儿的做法,这种事情就应该自动完成. .NET 中提供了非常方便的修改文件创建时间的方法,使用这种方法,能够帮助自动完成一部分文件头的编写 ...
- 关于Npoi+excel文件读取,修改文件内容的处理方式
因最近有需求场景,实现对文件的读写操作,又不单独生成新的文件,对于源文件的修改,做了一个简单实现,如下↓ // 要操作的excel文件路径 string fileName = Server.MapPa ...
- Linux修改文件permission属性
列出文件属性 ls -al 修改文件属性为可读.可写 sudo chmod -c 777 <your file name>
- python修改文件的属性
1.执行attrib系统命令 ATTRIB [+R | -R] [+A | -A ] [+S | -S] [+H | -H] [+I | -I] [drive:][path][filename] [/ ...
- Linux chmod命令修改文件与文件夹权限的命令附实例
Linux chmod命令修改文件与文件夹权限的命令附实例 作者:佚名 字体:[增加 减小] 来源:互联网 时间:05-01 20:46:07我要评论 在linux中要修改一个文件夹或文件的权限我们需 ...
- Linux chmod命令修改文件与文件夹权限命令代码
在Unix和Linux的各种操作系统下,每个文件(文件夹也被看作是文件)都按读.写.运行设定权限. 以下转自:http://www.codeceo.com/article/linux-chmod-co ...
随机推荐
- 小米note开启调试模式
1.刷机为开发版本. 2.拨电话界面输入 *#*#717717#*#* 开启调试模式. 3.驱动好像会自己安装.
- IIS 之 通过 Web.config 修改文件上传大小限制设置方法
在IIS 6.0中,不设置默认大小为4M,设置文件上传大小的方法,maxRequestLength(KB),executionTimeout(毫秒),配置如下节点: <system.web> ...
- 微信小程序倒计时组件开发
今天给大家带来微信小程序倒计时组件具体开发步骤: 先来看下最终效果: git源:http://git.oschina.net/dotton/CountDown 分步骤-性子急的朋友,可以直接看最后那段 ...
- 中间人攻击工具mitmf(另类的XSS注入攻击)
中间人攻击工具mitmf(另类的XSS注入攻击) (一)简介 (二)安装 (三)结合beef使用 (一)简介 Mitmf 是一款用来进行中间人攻击的工具.它可以结合 beef 一起来使用,并利用 be ...
- Hash值破解工具Hashcat使用
Hash值破解工具Hashcat使用 Hashcat介绍 HashCat系列软件拥有十分灵活的破解方式,可以满足绝大多数的破解需求. Hashcat系列软件是比较牛逼的密码破解软件,系列软件包含Has ...
- 我们为什么要学习 Spring Boot
现在貌似大家都知道 Spring Boot 很火了,做 Java 的不知道 Spring Boot 的都已经 Out 了,但是又有多少人是跟风学习的呢?今天我们就来说一下为什么要学习 Spring B ...
- BZOJ.5137.Standing Out from the Herd(广义后缀自动机)
题目链接 \(Description\) 对于每个串,求在\(n\)个串中只在该串中出现过的子串的数量. \(Solution\) 建广义SAM.对每个串插入时新建的np标记其属于哪个串. 然后在pa ...
- 洛谷P1198 [JSOI2008]最大数(BZOJ.1012 )
To 洛谷.1198 最大数 题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. 限制:L不超过当 ...
- bzoj 3143 随机游走
题意: 给一个简单无向图,一个人从1号节点开始随机游走(即以相同概率走向与它相邻的点),走到n便停止,问每条边期望走的步数. 首先求出每个点期望走到的次数,每条边自然是从它的两个端点走来. /**** ...
- javascript鼠标滚动
firefox使用DOMMouseScroll,其他浏览器使用mousewheel当滚动时获取wheelDelta值,firefox使用detail:值为下滚3上滚-3,其他浏览器使用wheelDel ...