DotNetZip 提取阻止进程访问文件

DotNetZip extract prevents process from accessing file

我正在使用 DotNetZip 库从 zip 文件中提取文件。

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 代码中有没有办法防止这种情况发生?

问题不是来自 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,则可以使用内置的资源监视器。阅读此 post:How to know what process is using a given file?