C#通过DSOFile读取与修改文件的属性
2017-09-12 17:14
211 查看
搜了一圈用C#读取与修改文件属性的文章,结果几乎找不到- -;
偶然间看到一个DSOFile工具,然后找到了对该工具进行详细讲解的一篇文章:《DSOfile,一个修改windows系统文件摘要的好东东。》,但是这里面的代码根本没法在C#的Console Application项目下直接用啊!所以一边摸索一边理解,一边写下这篇文章,给大家一点参考。
首先,下载DSOFile.dll文件,解压后在项目中引用它。这个文件是我从官网下载地址(点此打开)搬运过来的,上次更新居然是在十年前,也就是2007年更新的。
然后就开始一边码代码一边讲解了!
1.读取与设置预设属性
DSOFile内置了很多常用属性值,在此不一一列举,你可以自己亲自去查看。
其中,DSOFile的好处在于,如果你尝试输出一个非幻灯片文件的SlideCount等属性,它并不会产生错误,而是显示为0。
2.添加自定义属性值
必须知道的是,对于一个文件,一个自定义属性只能Add一次,也就是说,第二次运行上面的代码就会报错。所以当你添加自定义属性前一定要先判断是否已经存在该属性。
然而我并没有在DSOFile中找到判断属性是否存在的相关方法,而且也无法通过foreach来遍历它的所有自定义属性(如果有误,欢迎指出),所以我自己写了一个:
3.修改自定义属性值
4.删除自定义属性
同上面思路一样,通过循环找到对应的属性,然后将其删除。代码如下:
根据测试,删除操作不用执行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编辑该文件并保存,发现属性丢失
偶然间看到一个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[0].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 = 0; 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 = 0; 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编辑该文件并保存,发现属性丢失
相关文章推荐
- 字符串常量也能在程序运行后修改 通过修改PE文件格式 跳过其属性,改成可读写属性
- c# 通过修改图片对象的文件的字节 变相"加密""解密"图片在磁盘的存储
- 用C#修改Mp3文件属性
- CnCrypt 文件属性批量修改工具,通过修改文件属性达到更好的伪装效果
- C#修改文件的安全属性时报“没有可以设置的标志”
- 用C#修改Mp3文件属性
- SeeFiles:C#查看和修改文件或目录所有属性的工具
- Krpano学习:在C#中修改全景场景属性(C#操作全景vtour.xml文件及相关瓦片数据/panos/*.tiles)
- 通过vbs修改以点结尾的文件的属性为隐藏
- 用C#修改Mp3文件属性
- C# 通过窗体修改配置文件的代码 App.config
- c# 通过修改图片对象的文件的字节 变相"加密""解密"图片在磁盘的存储
- C#通过FTP账号上传、修改、删除文件 FTPClient
- c# 通过修改图片对象的文件的字节 变相"加密""解密"图片在磁盘的存储
- android中通过代码实现文件权限修改
- c#后台修改前台DOM的css属性
- Spring代码实例系列-09:通过Spring PropertyPlaceholderConfigurer将properties配置的属性注入到xml配置文件中
- C# 添加,修改,删除文件夹/文件集合
- C# 绘制曲线图,并保存为Gif格式文件 调试通过
- 通过修改ipa文件包修改文件名的方法