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修改文件的目的在于把安装时相关信息写入文件中,提供其它应用的读取,而这些信息也只能在安装时才能确定,比如安装用户选择 ...
随机推荐
- 【LOJ】#150. 挑战多项式
原题链接 多项式全家桶!快乐!(好像少个除法,不过有除法好像不太快乐) (说真的这是我第一次写exp和开根...水平不行.. 从最基础要实现的操作开始吧.. 多项式取模\(x^n\) 这个..很简单了 ...
- BZOJ1201 [HNOI2005]数三角形 大力出奇迹
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1201 题意概括 题解 n3跑过去了,大力出奇迹!简单的,不多说了. 代码 #include < ...
- 7-4素数环 uva 524
#include<iostream> #include<cstdio> #include<cmath> #include<cstring> using ...
- 定制库到maven库
有一些jar不支持maven,这个时候就可以使用下面的处理方式. kaptcha,它是一个流行的第三方Java库,它被用来生成 “验证码” 的图片,以阻止垃圾邮件,但它不在 Maven 的中央仓库中. ...
- java过滤emoji表情(成功率高)
转载自:http://blog.csdn.net/huangchao064/article/details/53283738 基本能过滤大部分的ios,安卓,微信emoji表情 有很多别的帖子搜出来很 ...
- 移动端Tap与滑屏实战技巧总结以及Vue混合开发自定义指令
最近在忙混合开发,因交互相对复杂,所以也踩了很多坑.在此做一下总结. 1.tap事件的实际应用 在使用tap事件时,老生常谈的肯定是点透问题,大多情况下,在有滑屏交互的页面时,我们会在根节点阻止默认行 ...
- SQL sysobjects 表 详解
sysobjects 表 在数据库内创建的每个对象(约束.默认值.日志.规则.存储过程等)在表中占一行.只有在 tempdb 内,每个临时对象才在该表中占一行. 列名 数据类型 描述 name sys ...
- 汉化 android studio
Analyze APK...android.jar\com\android\tools\idea\apk\viewer AnalyzeApkAction.class
- gradle 汉化
作者:韩梦飞沙 Author:han_meng_fei_sha 邮箱:313134555@qq.com E-mail: 313134555 @qq.com gradle 汉化 android stud ...
- 图的 储存 深度优先(DFS)广度优先(BFS)遍历
图遍历的概念: 从图中某顶点出发访遍图中每个顶点,且每个顶点仅访问一次,此过程称为图的遍历(Traversing Graph).图的遍历算法是求解图的连通性问题.拓扑排序和求关键路径等算法的基础.图的 ...