C# 读写文件摘要
主要参考地址:https://www.cnblogs.com/chenyangsocool/p/7511161.html
首先下载微软提供的工具:DsoFile (微软官网下载传送门)
读写自定义摘要信息(需要注意,自定义摘要信息只能添加一次,再添加会报错,所以如果对应的name已经存在,只能采用修改的方式添加)
/// <summary>
/// 检测该文件属性中是否已经存在指定的自定义属性key
/// </summary>
/// <param name="file">本地的文件</param>
/// <param name="key">自定义的key</param>
/// <returns>存在key返回对应的值,不存在key返回string.empty</returns>
private static string PropContains(string file, string key)
{
OleDocumentProperties odp = new OleDocumentProperties();
odp.Open(file); try
{
//由于不能直接foreach,所以用了for循环
for (int i = ; i < odp.CustomProperties.Count; i++)
{
if (odp.CustomProperties[i].Name == key)
{
return odp.CustomProperties[i].get_Value();
}
}
}
catch (Exception ex)
{
LogUtil.Error($"{file} 文件处理出错 ex:{ ex.ToString()}");
}
finally
{
odp.Close();
} return string.Empty;
} /// <summary>
/// 修改自定义属性的属性值(存在则修改,不存在则添加)
/// </summary>
/// <param name="file">本地的文件</param>
/// <param name="key">自定义的key</param>
/// <returns>修改成功返回true,不成功返回false</returns>
private static void PropChange(string file, string key, string value)
{
OleDocumentProperties odp = new OleDocumentProperties();
odp.Open(file); try
{
//由于不能直接foreach,所以用了for循环
for (int i = ; i < odp.CustomProperties.Count; i++)
{
if (odp.CustomProperties[i].Name == key)
{
//为指定自定义属性修改值
odp.CustomProperties[i].set_Value(value);
odp.Save(); return;
}
} //不存在指定属性,则添加
odp.CustomProperties.Add(key, value);
odp.Save();
}
catch (Exception ex)
{
LogUtil.Error($"{file} 文件处理出错 ex:{ ex.ToString()}");
}
finally
{
odp.Close();
} }
除开自定义摘要,还有很多自带的摘要信息可以直接使用,如下:
[Guid("58968145-CF02-4341-995F-2EE093F6ABA3")]
[TypeLibType()]
public interface SummaryProperties
{
[DispId()]
string Title { get; set; }
[DispId()]
string Subject { get; set; }
[DispId()]
string Author { get; set; }
[DispId()]
string Keywords { get; set; }
[DispId()]
string Comments { get; set; }
[DispId()]
string Template { get; }
[DispId()]
string LastSavedBy { get; set; }
[DispId()]
string RevisionNumber { get; }
[DispId()]
int TotalEditTime { get; }
[DispId()]
dynamic DateLastPrinted { get; }
[DispId()]
dynamic DateCreated { get; }
[DispId()]
dynamic DateLastSaved { get; }
[DispId()]
int PageCount { get; }
[DispId()]
int WordCount { get; }
[DispId()]
int CharacterCount { get; }
[DispId()]
dynamic Thumbnail { get; }
[DispId()]
string ApplicationName { get; }
[DispId()]
int DocumentSecurity { get; }
[DispId()]
string Category { get; set; }
[DispId()]
string PresentationFormat { get; }
[DispId()]
int ByteCount { get; }
[DispId()]
int LineCount { get; }
[DispId()]
int ParagraphCount { get; }
[DispId()]
int SlideCount { get; }
[DispId()]
int NoteCount { get; }
[DispId()]
int HiddenSlideCount { get; }
[DispId()]
int MultimediaClipCount { get; }
[DispId()]
string Manager { get; set; }
[DispId()]
string Company { get; set; }
[DispId()]
int CharacterCountWithSpaces { get; }
[DispId()]
bool SharedDocument { get; }
[DispId()]
string Version { get; }
[DispId()]
dynamic DigitalSignature { get; }
}
C# 读写文件摘要的更多相关文章
- ASP.NET -- WebForm -- Cookie的使用 应用程序权限设计 权限设计文章汇总 asp.net后台管理系统-登陆模块-是否自动登陆 C# 读写文件摘要
ASP.NET -- WebForm -- Cookie的使用 ASP.NET -- WebForm -- Cookie的使用 Cookie是存在浏览器内存或磁盘上. 1. Test3.aspx文件 ...
- android 学习随笔二(读写文件)
在android读写文件 RAM:运行内存,相当于电脑的内存 ROM:内部存储空间,相当电脑硬盘,android手机必须有的 SD卡:外部存储空间,相当电脑的移动硬盘,不是必须的.手机如果内置16G存 ...
- oracle读写文件--利用utl_file包对磁盘文件的读写操作
oracle读写文件--利用utl_file包对磁盘文件的读写操作 摘要: 用户提出一个需求,即ORACLE中的一个表存储了照片信息,字段类型为BLOB,要求能导出成文件形式. 本想写个C#程序来做, ...
- Hyper-V无法文件拖拽解决方案~~~这次用一个取巧的方法架设一个FTP来访问某个磁盘,并方便的读写文件
异常处理汇总-服 务 器 http://www.cnblogs.com/dunitian/p/4522983.html 服务器相关的知识点:http://www.cnblogs.com/dunitia ...
- 计算机程序的思维逻辑 (60) - 随机读写文件及其应用 - 实现一个简单的KV数据库
57节介绍了字节流, 58节介绍了字符流,它们都是以流的方式读写文件,流的方式有几个限制: 要么读,要么写,不能同时读和写 不能随机读写,只能从头读到尾,且不能重复读,虽然通过缓冲可以实现部分重读,但 ...
- Python读写文件
Python读写文件1.open使用open打开文件后一定要记得调用文件对象的close()方法.比如可以用try/finally语句来确保最后能关闭文件. file_object = open('t ...
- php中并发读写文件冲突的解决方案
在这里提供4种高并发读写文件的方案,各有优点,可以根据自己的情况解决php并发读写文件冲突的问题. 对于日IP不高或者说并发数不是很大的应用,一般不用考虑这些!用一般的文件操作方法完全没有问题.但如果 ...
- C#读写文件的方法汇总_C#教程_脚本之家
C#读写文件的方法汇总_C#教程_脚本之家 http://www.jb51.net/article/34936.htm
- Inno Setup 如何读写文件
软件安装的实质就是拷贝,对于简单的打包当然不需要考虑修改某(配置)文件.通过inno修改文件的目的在于把安装时相关信息写入文件中,提供其它应用的读取,而这些信息也只能在安装时才能确定,比如安装用户选择 ...
随机推荐
- 基于pgrouting的最短路径规划
最近项目上有一个计算两点最短路径的需求,即就是类似于百度地图的路径规划问题,小编研究了一段时间,并参考了相关资料,基于postgresql+postgis+pgrouting实现了简单的路径规划,计算 ...
- PhpStorm 中切换PHP版本
PhpStorm 中默认的 PHP 版本是 PHP 5.4 ,PhpStorm 会以该版本对编辑器中的PHP文件进行自动校验.EX:PHP文件中,使用了 PHP 5.4 版本以上的新特性,由于 Php ...
- memcache的简单使用示例
在实际应用中我们会缓存从数据库中查出来的结果集,以md5($sql)为$key,结果集为值. 以只是在php简单应用代码: <?php //建立memcache链接 $memcache = ne ...
- 095实战 ETL的数据来源,处理,保存
1.ETL 数据来源:HDFS 处理方式:Mapreduce 数据保存:HBase 2.为什么保存在Hbase中 数据字段格式不唯一/不相同/不固定,采用hbase的动态列的功能非常适合 因为我们的分 ...
- ubuntu TensorFlow安装
Tensorflow安装确实比caffe简单... cuda,cudnn安装就不说了 1 安裝pip(有就跳过) sudo apt-get install python-pip python-dev ...
- 001.Heartbeat简介
一 Heartbeat简介 1.1 概述 Heartbeat是Linux-HA项目中的一个组件,也是当前开源HA项目中最成功的一个例子,它提供了所有HA软件所需要的基本功能,如心跳检测和资源接管.监测 ...
- 洛谷.T22136.最长不下降子序列(01归并排序 分治)
题目链接 \(Description\) 给定一个长为n的序列,每次可以反转 \([l,r]\) 区间,代价为 \(r-l+1\).要求在\(4*10^6\)代价内使其LIS长度最长,并输出需要操作的 ...
- BZOJ.2242.[SDOI2011]计算器(扩展欧几里得 BSGS)
同余方程都不会写了..还一直爆int /* 2.关于同余方程ax ≡b(mod p),可以用Exgcd做,但注意到p为质数,y一定有逆元 首先a%p=0时 仅当b=0时有解:然后有x ≡b*a^-1( ...
- iOS web view 与 js 交互
移动应用中许多复杂的且经常改动的页面会使用H5进行代替native,这里就会使用到js和webview的交互 iOS里面,UIWebView提供了方法stringByEvaluatingJavaScr ...
- Java中使用Timer和TimerTask实现多线程
转自:http://www.bdqn.cn/news/201305/9303.shtml 摘要:Timer是一种线程设施,用于安排以后在后台线程中执行的任务.可安排任务执行一次,或者定期重复执行,可以 ...