SharpCompressを使用してrarファイルのセットを解凍してから削除するプロセスを作成しようとしています。
最初に、次のように解凍するさまざまなファイルのセットをループするforeachループがあります。
foreach (var package in extractionPackages.Where(package => Extractor.ExtractToFolder(package, destinationFolder)))
{
FileHelper.DeleteExtractionFiles(package);
}
抽出プロセスは、SharpCompress Testsコードから直接取得され、次のようになります。
public static bool ExtractToFolder(ExtractionPackage extractionPackage, string extractionPath)
{
var fullExtractionPath = Path.Combine(extractionPath, extractionPackage.FolderName);
try
{
using (var reader = RarReader.Open(extractionPackage.ExtractionFiles.Select(p => File.OpenRead(p.FullPath))))
{
while (reader.MoveToNextEntry())
{
reader.WriteEntryToDirectory(fullExtractionPath, ExtractOptions.ExtractFullPath | ExtractOptions.Overwrite);
}
}
return true;
}
catch (Exception)
{
return false;
}
}
最初のコードブロックでわかるように、ファイルを削除するために呼び出しますが、ファイルが別のプロセスによってロックされているため、エラーが発生します 。プロセスはファイル'file.rar'にアクセスできません。別のプロセス。
foreachループの後に削除を入れようとすると、複数のファイルがある場合は、最後のファイルセットを除くすべてを削除できます。それが1つだけの場合、最後のファイルセットが「ロック解除」されていないように見えるため、同じ問題が発生します。
ファイルのロックが解除されるようにコードを構造化するにはどうすればよいですか?