我试图创建一个过程,使用 SharpCompress 解压缩一组 rar 文件,然后删除它们。
我首先有一个 foreach 循环,它遍历要解压缩的不同文件集,如下所示:
foreach (var package in extractionPackages.Where(package => Extractor.ExtractToFolder(package, destinationFolder)))
{
FileHelper.DeleteExtractionFiles(package);
}
提取过程直接采用 SharpCompress 测试代码,如下所示:
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 循环之后进行删除,如果有多个文件,我可以删除除最后一组文件之外的所有文件。如果它只是一个相同的问题,因为最后一组文件似乎没有被“解锁”。
如何构建代码以解锁文件?