2015-03-24 1 views
1

Я использую библиотеку DotNetZip для извлечения файлов из zip-файла.Вывод DotNetZip не позволяет процессу получить доступ к файлу

using(ZipFile zip = ZipFile.Read(zipLocation)) 
{ 
    foreach (ZipEntry entry in zip){ 
     entry.Extract(_updateDir); 
     Log.Write("Unpacked: " + entry.FileName, Log.LogType.Info); 
    } 

    zip.Dispose(); 
} 

Впоследствии я пытаюсь отредактировать один из файлов, которые я извлек.

var updateList = allFiles.Where(x => x.Contains(".UPD")); 
foreach (string upd in updateList){ 
    string[] result = File.ReadAllLines(upd); 
    int index = Array.IndexOf(result, "[Info]"); 

    //then I do stuff with index 
}  

На линии

string[] result = File.ReadAllLines(upd); 

я получаю исключение: The process cannot access the file <file name> because it is being used by another process.

Я знаю, что это исключение бросают, потому что файл используется в другом месте. Единственное место, которое он использует до File.ReadAllLines(upd), находится в коде DotNetZip выше.

Есть ли способ в коде DotNetZip предотвратить это?

ответ

2

Проблема не в DotNetZip. Я пробовал код в своем проекте, и он работает с файлом:

[Test] 
     public void Test2() 
     { 
      using (ZipFile zip = ZipFile.Read("D:/ArchiveTest.zip")) 
      { 
       foreach (ZipEntry entry in zip) 
       { 
        entry.Extract("D:/ArchiveTest"); 
       } 

       zip.Dispose(); 
      } 

      var updateList = Directory.GetFiles("D:/ArchiveTest").Where(x => x.Contains(".UPD")); 
      foreach (string upd in updateList) 
      { 
       string[] result = File.ReadAllLines(upd); 
       int index = Array.IndexOf(result, "[Info]"); 

       //then I do stuff with index 
      } 
     } 

Возможно, другой процесс использует файл, который вы пытаетесь прочитать. Если у вас Windows7 или Windows8, вы можете использовать встроенный монитор ресурсов. Читать это сообщение: How to know what process is using a given file?

+0

Спасибо за помощь, этот инструмент был полезен. Другой процесс в другом месте также использовался в том же файле. – vogs

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