C# 无法删除由SharpZipLib(FastZip)创建的Zip文件
我正在使用SharpZipLib中的FastZip类创建一个zip文件,一旦关闭程序,我就无法删除该文件,因为: “无法删除zip.zip:另一个人或程序正在使用它。请关闭可能正在使用该文件的所有程序,然后重试。” 生成文件的代码如下所示:C# 无法删除由SharpZipLib(FastZip)创建的Zip文件,c#,file,sharpziplib,C#,File,Sharpziplib,我正在使用SharpZipLib中的FastZip类创建一个zip文件,一旦关闭程序,我就无法删除该文件,因为: “无法删除zip.zip:另一个人或程序正在使用它。请关闭可能正在使用该文件的所有程序,然后重试。” 生成文件的代码如下所示: fZip.CreateEmptyDirectories = true; fZip.CreateZip(filesPath + "\\" + this.zipName, filesPath, false, this.zipFilter); 我尝试使用:
fZip.CreateEmptyDirectories = true;
fZip.CreateZip(filesPath + "\\" + this.zipName, filesPath, false, this.zipFilter);
我尝试使用:
using (FastZip fZip = new FastZip())
{
try
{
fZip.CreateEmptyDirectories = true;
fZip.CreateZip(filesPath + "\\" + this.zipName, filesPath, false, this.zipFilter);
}
catch (Exception)
{
}
}
但它不会转换为iDisposable也许防病毒软件正忙于检查文件?如果没有,那么就找一个程序来告诉你哪些程序打开了文件 你可以看看:
我原以为关闭程序也会做同样的事情,只是猜测而已。确保在完成SharpZipLib流后关闭它,可以通过将其构造封装在“using”语句中来完成此操作
using(Stream s = new SharpZipLibStream())
{
/*...do stuff, zip stuff.../
}
看起来可能是SharpZipLib的臭虫。FastZip.CreateZip方法有三个重载,其中两个重载用于创建use文件。创建方法如下:
CreateZip(File.Create(zipFileName), // ...
它似乎不会关闭流,因此您最好使用:
string zipFileName = System.IO.Path.Combine(filesPath, this.zipName);
using (Stream stream = File.Create(zipFileName))
{
fZip.CreateZip(stream, filesPath, false, this.zipFilter, null);
stream.Close();
}
从技术上讲,您不需要在using块中调用Close,但我喜欢明确地说明这一点。实际上我自己刚刚解决了这个问题。原来不是SharpZipLib/FastZip。我通过System.Net.Mail发送了一封电子邮件,并将FastZip文件作为附件附加到该电子邮件中。当我试图删除附件时,遇到了您收到的错误。原来我所要做的就是在发送电子邮件后调用MailMessage.Dispose()
查看代码中可能锁定文件的任何其他项;如果可能,尝试处置()或关闭()这些项目。不,已关闭防病毒,但它仍然不希望我删除它。解锁器也没有帮助。SysInternals进程资源管理器还应该能够告诉您文件的所有者。解锁者做到了。起初我没有看到删除选择框。我也这么想,但fastZip类没有:(fastZip是否实现IDisposable?如果是,您是否使用了“using”或.Dispose();”?但是,我没有使用ShrapzipStream。我使用的是fastZip。我使用了代码,但它给出了相同的错误…我开始认为问题在于pc。。。