Readin wordfiles文件似乎已损坏

时间:2016-09-27 12:58:16

标签: c#

对于“已损坏”的文件,如何引发错误,但在搜索〜$ test.docx 的文件夹中不存在这些错误 我可以以某种方式忽略这些文件吗?

 string path ="D:/Users/Bole/TSM/";
      foreach (string file in Directory.EnumerateFiles(path,"*.docx"))
        {
            {
                //Open the doc File
                var wordApplication = new Microsoft.Office.Interop.Word.Application();
                var document = wordApplication.Documents.Open(file);

1 个答案:

答案 0 :(得分:2)

如果我能正确理解你,可能就是这么简单:

var fileInfo = new FileInfo(file);

if (!fileInfo.Name.StartsWith("~$"))
{
    var wordApplication = new Microsoft.Office.Interop.Word.Application();
    var document = wordApplication.Documents.Open(file);    
}

此外(正如Panagiotis Kanavos指出的那样),foreachMoveNext一起使用时,你并没有给自己带来任何好处。原因是,每次循环时,枚举器的FindNextFile()方法都会调用~$...docx,因此新文件可以出现在结果中。由于每次运行此语句时都会创建一个新的var document = wordApplication.Documents.Open(file); 文件(请参阅Directory.EnumerateFiles()以获取解释原因的原因):

Directory.EnumerateFiles()

随着循环的继续,你会遇到这些文件。使用this而不是RUN可以避免这种情况,因为前者只返回一个文件路径数组,当您循环浏览时,它们不会发生变化;即它只是一个静态的文件列表,它是在循环的开头构建的,忽略了循环发生时创建的文件。