gpt4 book ai didi

c# - 为什么这个文件用了C1ZipFile后还是删不掉?

转载 作者:行者123 更新时间:2023-11-30 14:44:02 25 4
gpt4 key购买 nike

下面的代码给我一个 System.IO.IOException 消息“进程无法访问文件”。

private void UnPackLegacyStats()
{
DirectoryInfo oDirectory;
XmlDocument oStatsXml;

//Get the directory
oDirectory = new DirectoryInfo(msLegacyStatZipsPath);

//Check if the directory exists
if (oDirectory.Exists)
{
//Loop files
foreach (FileInfo oFile in oDirectory.GetFiles())
{
//Check if file is a zip file
if (C1ZipFile.IsZipFile(oFile.FullName))
{
//Open the zip file
using (C1ZipFile oZipFile = new C1ZipFile(oFile.FullName, false))
{
//Check if the zip contains the stats
if (oZipFile.Entries.Contains("Stats.xml"))
{
//Get the stats as a stream
using (Stream oStatsStream = oZipFile.Entries["Stats.xml"].OpenReader())
{
//Load the stats as xml
oStatsXml = new XmlDocument();
oStatsXml.Load(oStatsStream);

//Close the stream
oStatsStream.Close();
}

//Loop hit elements
foreach (XmlElement oHitElement in oStatsXml.SelectNodes("/*/hits"))
{
//Do stuff
}
}

//Close the file
oZipFile.Close();
}
}

//Delete the file
oFile.Delete();
}
}
}

我正在努力查看文件仍然可以锁定的位置。所有可能持有文件句柄的对象都在使用 block 中并被显式关闭。

是否与使用 FileInfo 对象而不是静态 GetFiles 方法返回的字符串有关?

有什么想法吗?

最佳答案

我没有在您的代码中看到问题,一切正常。要检查问题是否出在 C1ZipFile 中,我建议您从流中初始化 zip,而不是从文件中初始化,这样您就可以显式关闭流:

//Open the zip file
using (Stream ZipStream = oFile.OpenRead())
using (C1ZipFile oZipFile = new C1ZipFile(ZipStream, false))
{
// ...

其他几个建议:

  • 您不需要调用 Close() 方法,使用 (...) 将它们移除。
  • 移动 xml 处理(循环命中元素)超大 zip 处理,即在 zip 文件关闭之后,这样您就可以尽可能少地打开文件。

关于c# - 为什么这个文件用了C1ZipFile后还是删不掉?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1087746/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com