sevenzipsharp файл блокировки.Я не могу переместить файл? - PullRequest
1 голос
/ 12 января 2012

Я запускаю sevenzipsharp для различных архивов, и если он пройдет мой тест, я бы хотел переместить архив в другую папку.Однако я получаю исключение, сообщающее, что файл используется процессом.Я не могу переместить его в проводнике Windows, однако, когда я убиваю процесс приложения, я могу переместить его.Я подозреваю, что файл sevenzipsharp заблокирован, поэтому я не могу его переместить.

Я пишу using (var extractor= new SevenZipExtractor(fn)) {.Я попытался переместить файл за пределы блока использования, но все равно не пошел.Кажется, что после того, как я запустил этот метод несколько раз, я могу переместить первый архив, но потом я не смогу переместить последний архив.можно переместить архив в папку?

Ответы [ 2 ]

1 голос
/ 25 апреля 2017

Я мог бы сделать эту работу (даже с недействительными архивами) с помощью следующего кода:

try 
{
    extractor.ExtractArchive(tempFolder);
}
finally
{
    extractor.Dispose();
    GC.Collect();
    GC.WaitForPendingFinalizers();
    Directory.Delete(tempFolder, true);
}
0 голосов
/ 31 мая 2012

Просто утилизируйте () этот объект и не используйте использование (....) Я не знаю почему (!), Но этот метод работал для меня.

Но если архив недействителен, он останется заблокированным ... Любое предложение?

UPDATE: Существует лучший способ. Вы можете создать поток для вашего файла и закрыть его в конце кода.

Stream reader=new FileStream(filename, FileMode.Open);//You can change Open mode to OpenOrCreate
sevenZipExtractor extactor= new SevenZipExtractor((Stream)reader);

//Your code here.....

reader.Close();
extactor.Dispose();
...