检查压缩是否完成

本文关键字:是否 压缩 检查 | 更新日期: 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)。