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?
我正在使用 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?