2015-05-15 1 views
2

Я пытаюсь создать приложение, которое отображает всех авторов .doc-файлов из папки и ее подпапок, проблема в том, что я использовал Directory.GetFiles("*.doc", SearchOption.AllDirectories), и когда я пытаясь прочитать из папки с очень большим количеством файлов, приложение замораживается в этом пункте. Вот мой кодПриложение зависает при попытке прочитать Author из .doc нескольких файлов

FileInfo[] Files = dir.GetFiles("*.doc", SearchOption.AllDirectories); 
foreach(FileInfo file in Files) 
{ 
    try 
    { 
     //ConvertDOCToDOCX(file.FullName); 
     using(WordprocessingDocument sourcePresentationDocument = WordprocessingDocument.Open(file.FullName, false)) 
     { 
      metadataList.Add(new Metadata() 
      { 
       Name = "Title", Value = file.Name 
      }); 
      metadataList.Add(new Metadata() 
      { 
       Name = "Author", Value = sourcePresentationDocument.PackageProperties.Creator 
      }); 
      metadataList.Add(new Metadata() 
      { 
       Name = "", Value = "" 
      }); 
     } 
    } 
} 

ответ

1

Я думаю, что вам не нужен этот «WordprocessingDocument» - это создает большую нагрузку - вы можете просто прочитать метаинформацию через .net-файлы по умолчанию.

Для примера, вы должны смотреть на Read/Write 'Extended' file properties (C#)

+0

спасибо, это помогло, но есть ли способ, чтобы проверить все подкаталоги пути с Shell32? –

+0

Я так не думаю, вам придется перебирать все папки рекурсивно – Cadburry

0

приложение замораживания в этой точке

Да потому, что вы делаете много работы в потоке пользовательского интерфейса. Не делай этого - никогда не делай этого.

Возможно, вы должны сделать все, что работает в фоновом потоке (либо с BackgroundWorker, либо, возможно, Task.Run), а затем только изменить пользовательский интерфейс (в потоке пользовательского интерфейса), когда вы закончите.

 Смежные вопросы

  • Нет связанных вопросов^_^