检查压缩是否完成
本文关键字:是否 压缩 检查 | 更新日期: 2023-09-27 18:22:01
我花了一整天的时间试图弄清楚压缩是否完成。我当前的代码如下:
using (ZipFile zip = new ZipFile())
{
zip.Encryption = EncryptionAlgorithm.WinZipAes256;
zip.AddDirectory(ApplicationData);
zip.Save(AppData + "MagazaContent.mea");
Directory.Delete(ApplicationData, true);
}
我想在压缩完成时触发Directory.Delete(ApplicationData, true);
。在我当前的代码中,Directory.Delete(ApplicationData, true);
在被压缩之前就会被触发。我该怎么做?请帮忙。
编辑:我用工作代码更新了我的问题
public class ZipSaver
{
private ZipFile _zipFile;
public ZipSaver()
{
_zipFile = new ZipFile();
_zipFile.SaveProgress += ZipFile_SaveProgress;
}
public void StartZippingFile()
{
_zipFile.Encryption = EncryptionAlgorithm.WinZipAes256;
_zipFile.AddDirectory(frmMain.ApplicationData);
_zipFile.Save(frmMain.AppData + "MagazaContent.mea");
}
public void ZipFile_SaveProgress(object sender, SaveProgressEventArgs e)
{
if (e.EventType == ZipProgressEventType.Saving_Completed)
{
Directory.Delete(frmMain.ApplicationData, true);
}
}
}
看起来不像是在使用System.IO.Compression.ZipFile类。
我们需要知道你指的是哪个ZipFile
。
同时,您可以查看类上的事件(如果有),看看是否有OnZipCompleted
甚至Async
版本可以等待。
编辑:看起来ZipFile有一个OnSaveCompleted
事件。http://dotnetzip.codeplex.com/SourceControl/latest#Zip/ZipFile.Events.cs
你可以这样做:
public class ZipSaver
{
private ZipFile _zipFile;
public ZipSaver() // add necessary parameters
{
_zipFile = new ZipFile();
_zipFile.OnSaveCompleted += ZipFile_OnSaveCompleted;
}
public void StartZippingFile()
{
// pretty much the code you have in your question with the exception of the using block around it.
}
public void ZipFile_OnSaveCompleted() // Add necessary parameters from OnSaveCompleted delegate
{
// Delete application data
// Dispose of ZipFile.
}
}
希望这能帮到你。
查看源代码,有一个SaveProgress
事件处理程序。你可以勾选它,看看什么时候保存完成。
我在查看的源代码中没有注意到多线程,所以我不明白为什么保存文件后保存不返回。我想我错过了什么。
对不起,我的最后一个答案不在上下文中这是一个的例子
ZipFile zip = new ZipFile();
zip.SaveProgress += delegate { Directory.Delete(ApplicationData, true); };
zip.Encryption = EncryptionAlgorithm.WinZipAes256;
zip.AddDirectory(ApplicationData);
zip.Save(AppData + "MagazaContent.mea");
在这种情况下,您不能在ZipFile类上使用"using",您必须自己处理它,否则您将产生一个引发条件,并尝试在已处理的对象上调用事件(SaveProgress)。