C#经过DSOFile读取与修改文件的属性

搜了一圈用C#读取与修改文件属性的文章,结果几乎找不到- -;windows

偶然间看到一个DSOFile工具,而后找到了对该工具进行详细讲解的一篇文章:《DSOfile,一个修改windows系统文件摘要的好东东。》,可是这里面的代码根本无法在C#的Console Application项目下直接用啊!因此一边摸索一边理解,一边写下这篇文章,给你们一点参考。服务器

 

首先,下载DSOFile.dll文件,解压后在项目中引用它。这个文件是我从官网下载地址(点此打开)搬运过来的,上次更新竟然是在十年前,也就是2007年更新的。编辑器

而后就开始一边码代码一边讲解了!ide

 

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。spa

 

2.添加自定义属性值.net

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一次,也就是说,第二次运行上面的代码就会报错。因此当你添加自定义属性前必定要先判断是否已经存在该属性。code

然而我并无在DSOFile中找到判断属性是否存在的相关方法,并且也没法经过foreach来遍历它的全部自定义属性(若是有误,欢迎指出),因此我本身写了一个:server

/// <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编辑该文件并保存,发现属性丢失

相关文章
相关标签/搜索