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

上次写了一篇删除Office(Word,Excel,PowerPoint)中Recent Document最近文档地址不存在的文件,注重从注册表中删除记录,后来发现有问题,online打开文件的记录在注册表中并没有找到(不知道注册表中有没有,个人没有找到,发现online打开会生成临时缓存文件,文件的名字被重新命名),现在写一个适用online和local两种情况的(online打开的文件情况比较多,这里就拿sharepoint上面打开的文件为例,如果有通用的情况,希望告知,共同进步)

1.以word举例,使用Microsoft.Office.Interop.Word这个命名空间下的库,通过Application.RecentFiles得到最近打开文件

RecentFiles recentFiles = this.Application.RecentFiles;
                

2.对得到的文件集合recentFiles遍历,对每个文件进行判断是local还是online

foreach (RecentFile recentFile in recentFiles)
                {
                    string onlineUrl = string.Empty;
                    try
                    {
                        string path = recentFile.Path;
                        string name = recentFile.Name;
                        bool isOnline = path.Contains("http");
                    }
                    catch (Exception ex)
                    {
                        //打log文件,自己可以直接输出就行console.writeline(ex.message)
                        logger.Error(string.Format("An error occurred while DMS {0} {1} clear online recent file:{2}.Reason: {3}", officeType, version, onlineUrl, ex.ToString()));
                    }
                }
            }

3.对于local的文件记录,可以直接判断存在与否

if (!isOnline)
{
       if (!File.Exist(path))
       {
              recentFile.Delete();
       }
}

4.对于online(这里以sharepoint上面打开的文件为例),需要稍微更改一下文件的路径,因为通过recentFile得到的path不是我们想要的格式,例如http:\\dragonma:19004\Shared%20Document\Test1\test1.docx,需要改成我们平时用client api连接sharepoint站点用的url格式,例如http://dragonma:19004/Shared%20Document/Test1/test1.docx

if(online)
{
string onlinePath = path.Substring(path.IndexOf("http"));
                            string firstTemp = onlinePath.Substring(onlinePath.IndexOf("\\") + 1);
                            int needAdd = onlinePath.Length - firstTemp.Length;
                            int secondBackslash = firstTemp.IndexOf("\\");
                            string folderUrl = firstTemp.Substring(secondBackslash + 1);
                            string webUrl = onlinePath.Substring(0, secondBackslash + needAdd);
                            string fileServerRelativeUrl = folderUrl + "\\" + name;
                            webUrl = webUrl.Replace("\\", "//");
                            fileServerRelativeUrl = "/" + fileServerRelativeUrl.Replace("\\", "/");
                            onlineUrl = webUrl + fileServerRelativeUrl;
                            OCT.SPOperation.OCTOperation OCTOperation = OCT.SPOperation.OCTOperation.GetInstance();
                            bool recentFileIsExist = OCTOperation.RecentFileIsExist(webUrl, fileServerRelativeUrl);
                            if (!recentFileIsExist)
                            {
                                recentFile.Delete();
                            }

}

5.OCTOperation.RecentFileIsExist是自己写的一个函数比较简单,因为在公司里面用给进行了好几次封装,这里就不贴出来了,参照以前写的sharepoint的文章很容易写,例如SharePoint中Document Library文档库数据备份到本地里面的连接sharepoint站点和判断文件存在与否

6#新手一枚,欢迎讨论

你可能感兴趣的:(注册表增删查改)