最近碰到一个需求,删除Office(Word,Excel,PowerPoint)中Recent Document最近文档地址不存在的文件,即每次打开office(Word,Excel,PowerPoint),发现Recent Document有些文件的地址已经失效(移动或者删除),怎么把这些无效的文件删除,这里把我的做法,思路以及碰到的问题和解决过程记录下来。

1.通过注册表找到Office(Word,Excel,PowerPoint)中Recent Document中对应的位置,这里以Word为例,最近文件有file1,file2,file3,对应打开的位置为(C:\Test\file1.doc,C:\Test\file2.doc,C:\Test\file3.doc),其中file2已经移动

//OpenSubKey(param1,param2),param1注册表中相对路径,param2为true代表有Write的权限
//version是Word(Excel,PowerPoint)的版本,例如2013的版本,对应注册表的目录为15.0
//officeType是Office工具的类型,这里应该是Word
RegistryKey userMRU = Registry.CurrentUser.OpenSubKey(string.Format("Software\\Microsoft\\Office\\{0}\\{1}\\User MRU", version, officeType), true);

2.注册表User MRU目录下面是Word所有用户的信息,其中Recent Document保存在对应用户的子目录File MRU下面,下面遍历得到具体某个用户的File MRU

                //得到userMRU所有子文件夹的name,即对应不同的用户string[] directoryNames = userMRU.GetSubKeyNames();//遍历得到不同用户下面的File MRU文件夹foreach (string directoryName in directoryNames){RegistryKey userMRUSubDirectory = userMRU.OpenSubKey(directoryName, true);RegistryKey fileMRU = userMRUSubDirectory.OpenSubKey("File MRU", true);}

3.需要得到fileMRU下面的key和value,并且判断value中存储的文件路径是否还存在

//得到fileMRU下面所有key的Name,分别为item1,item2,item3
string[] fileTitles = fileMRU.GetValueNames();
//得到key的value,例如[F00000000][T01D45490CE43CA41][O00000000]*C:\Test\File1.doc
//*前面是一段我们暂时用不到的东西,我们需要的是*后面的文件路径
string fileValue = fileMRU.GetValue(fileTitles[i]).ToString();
string[] fileValues = fileValue.Split('*');
//判断fileValues[fileValues.Length-1]是否存在这个路径的文件
//这里不用fileValues[1]判断,防止用户自己到注册表手动改value导致value失效,程序就会抛异常if (!File.Exists(fileValues[fileValues.Length-1])){}

4.下面就是当文件路径下面的文件已经不存在了,该如何修改

(思路1)最开始的时候是直接删除key,发现file2不存在,删除item2,f5刷新注册表,会发现注册表中只有item1和item3,似乎成功删除了,但是打开word工具就会发现最近文档只有item1对应的file1,注册表中item3读取不到了(这里简单说一下我的个人理解,当最近文档中有item1,对应文件file1,注册表为key:item1,value:一段string*file1的路径,这时候word打开一个文件,最近文档就增加了file2,注册表就变成了key:item1,value:一段string*file2的路径;key:item2,value:一段string*file1的路径,即可以理解word读取注册表中key是从上往下读取的,如果某一个key不存在后面的key就不继续读取了)

//删除file2对应的key
fileMRU.DeleteValue(fileTitles[i]);

(思路2)直接删除key不行,那就改变key的值,让其为空,改过之后打开word能正常读取,但是这里也留下来一个隐患,注册表中还有三个key,Recent Document则只有两个文件file1,file3。file2不存在了,但是它还占用着一个key,关键是它不知道它占用着哪个key的资源,随着像file2这种失效文件的增多,恐怖的事情就会发生了

//修改file2对应的key的值
fileMRU.SetValue(fileTitles[i],"");

(思路三)把item2中value改成已经存在item3中有效的value,然后删除后面的item3,这样就完美的解决了问题

string[] fileTitles = fileMRU.GetValueNames();// tempLength用来记录有效的key的数目,这样每次删除key都是最后一个// 不会数组越界//要逆序操作,例如item3,item2,item1,这样每次碰到无效的key,只要把后面的                        //key(已经判断是有效)的value赋给前一个key,然后删除最后一个key即可                  int tempLength = fileTitles.Length;for (int i = tempLength-1; i >= 0; i--){string fileValue = fileMRU.GetValue(fileTitles[i]).ToString();string[] fileValues = fileValue.Split('*');if (!File.Exists(fileValues[fileValues.Length-1])){try{                                for (int j = i + 1; j < tempLength; j++){string value = fileMRU.GetValue(fileTitles[j]).ToString();fileMRU.SetValue(fileTitles[j - 1], value);}fileMRU.DeleteValue(fileTitles[tempLength-1]);tempLength--;}catch (System.Exception ex){//你可以打印日志或者输出控制台}}}                     

5.问题解决,提交代码

删除Office(Word,Excel,PowerPoint)中Recent Document最近文档地址不存在的文件相关推荐

  1. 删除Office Word (Excel)中Recent Document最近文档中本地和online打开文件路径已经不存在的文件记录

    上次写了一篇删除Office(Word,Excel,PowerPoint)中Recent Document最近文档地址不存在的文件,注重从注册表中删除记录,后来发现有问题,online打开文件的记录在 ...

  2. [OfficeExcel] Word+Excel邮件合并 生成多个文档

    王佩丰老师OfficeExcel2010 13讲 邮件合并--引用Excel数据 学习笔记 批量生成多个邮件 利用Word发送邮件 每页显示多条记录 邮件合并后得数字格式处理 批量生成多个邮件 邮件& ...

  3. word 编辑过程中变为只读_word文档保存后,如何恢复之前的资料?

    在word上面的菜单栏,点击[工具]-[备份管理],点击[查看其它备份],会自动打开一个文件夹,里面是word保存的历史备份文件在里面搜索这个文件名,查看距离最近生成的文件,双击即可.以下是详细介绍: ...

  4. Office word excel电子表格在线编辑的实现方法

    Office xp之后的版本支持通过webdav协议(http的扩展)直接编辑服务器上的文件. IIS(6.0)支持webdav,这在IIS管理器的web服务扩展中可以看到.利用IIS作为webdav ...

  5. 在线Word/Excel/PowerPoint/Photoshop 汇总

    转自:http://www.showeb20.com/?p=1067 在线Word/Excel/PowerPoint/Photoshop 汇总 "云计算"--这是目前网络上继&qu ...

  6. html画布显示PPT,【Web前端问题】有没有办法让HTML5 canvas显示/预览word/excel/powerpoint 文档?...

    目前想实现类似百度文库那样的在线文档预览,但是他们使用的一般都是Flash,而HTML5 canvas可以在大多数情况下代替Flash,那么有没有办法让canvas显示/预览Office文档? 如果不 ...

  7. Web方式预览Office/Word/Excel/pdf文件解决方案

    Web方式预览Office/Word/Excel/pdf文件解决方案 参考文章: (1)Web方式预览Office/Word/Excel/pdf文件解决方案 (2)https://www.cnblog ...

  8. Elasticsearch(033):es中Document(文档)之删除文档

    一.概述 在上一小节中,我们学习了文档的定义和新增语法.当然,有新增操作,相反的就会有删除操作.es中的文档的删除操作分为两类: 主键删除 和查询删除. 二.删除文档(主键删除) 示例: 下面操作的含 ...

  9. 微软 Office Online 在线查看word,pdf, xls,ppt 文档

    使用微软提供的Office Online平台只需要一个网址即可在线查看Xls,doc,PPT等文档 http://view.officeapps.live.com/op/view.aspx?src=要 ...

最新文章

  1. 经典排序算法之直接选择排序
  2. cppunit helloworld详尽篇
  3. Chrome 74 稳定版发布,Windows 10 支持黑暗模式
  4. html transform属性,css3 transform属性详解
  5. 『科学计算』科学绘图库matplotlib练习
  6. 人工智障学习笔记——机器学习(6)协同过滤
  7. 富爸爸系列 -- 《财务自由》学习笔记之一
  8. 计算机排名考研,计算机考研学校排名
  9. 中国象棋程序的设计与实现(七)--心得体会和开发日志
  10. caffe loss layer
  11. Wireshark实战分析之DHCP协议(一)
  12. 每日站会怎么开才好?——你的站会姿势正确吗?
  13. 免费 web api 接口大全
  14. wordpress古腾堡淘宝客插件,支持京东淘宝
  15. 关于Cisco ASDM中配置STATIC NAT顺序的问题-By 年糕泰迪
  16. (算法)2048游戏
  17. “智慧路灯”、“一杆多用”、“智慧灯杆”将成为新型智慧城市建设的重要决策部署
  18. 网络神经科学 Network neuroscience
  19. 怎样分析数据致提高产出?(三)
  20. 用友推出电子发票服务平台 互联网发力

热门文章

  1. MySQL——数据库设计三范式
  2. Linux频繁自动重启原因排查
  3. 百度无人驾驶Apollo的dreamview的demo运行
  4. jansson库double精度控制
  5. 一个大学生的迷茫和人生定位
  6. 桌面和文件夹内的文件不能拖动(转…
  7. java 分析英文段落,查找、统计单词
  8. 兄弟3150cdn灯亮error_兄弟2240d打印机drum和error灯同时亮该怎么解决?
  9. 单位参保证明与个人参保证明打印
  10. 春夏交替皮肤过敏高发 专家:最好不换护肤品