Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法删除由SharpZipLib(FastZip)创建的Zip文件_C#_File_Sharpziplib - Fatal编程技术网

C# 无法删除由SharpZipLib(FastZip)创建的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); 我尝试使用:

我正在使用SharpZipLib中的FastZip类创建一个zip文件,一旦关闭程序,我就无法删除该文件,因为:

“无法删除zip.zip:另一个人或程序正在使用它。请关闭可能正在使用该文件的所有程序,然后重试。”

生成文件的代码如下所示:

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

也许防病毒软件正忙于检查文件?如果没有,那么就找一个程序来告诉你哪些程序打开了文件

你可以看看:


我不熟悉FastZip API(因此这只是一个小游戏),但您是否需要使用类似于fZip.close()的东西来关闭存档


我原以为关闭程序也会做同样的事情,只是猜测而已。

确保在完成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。。。