检查压缩是否完成

时间:2014-09-15 21:24:11

标签: c# zip

我正在尝试整天来弄清楚压缩是如何完成的。我目前的代码如下:

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);
        }
    }
}

3 个答案:

答案 0 :(得分:1)

您似乎没有使用System.IO.Compression.ZipFile class

我们需要知道您指的是ZipFile

与此同时,您可能会查看类中的事件(如果有的话),看看是否有可能等待的OnZipCompleted甚至Async版本。< / p>

编辑:看起来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.
 }
}

希望能帮到你。

答案 1 :(得分:0)

对不起,我的上一个答案不在上下文中 这是一个例子

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)。

答案 2 :(得分:0)

查看the source code,有一个SaveProgress事件处理程序。你可以挂钩,看看保存完成的时间。

我没有注意到我查看的源代码中的多线程,所以我不明白为什么在保存文件后Save不会返回。我想我错过了什么。