0

我有一个“工作列表样式”应用程序,用户从列表中选择一个 zip 文件,然后单击一个按钮将其解压缩到本地文件夹。

以下是所用代码的摘录:

ZipFile zip = Ionic.Zip.ZipFile.Read(sourcePackage);
zip.ExtractAll(destination);
zip.Dispose();

第一次一切正常,但如果用户尝试再次解压缩同一个文件(即使在解压缩了其他文件之后),它会太快,并且在目标文件夹中创建的所有内容看起来像一个临时文件(例如'x2hiex0z .pj0')。

就好像 Ionic.Zip.ZipFile.Read 正在创建以前解压缩文件名的缓存。

如果是这样,我该如何清除它以便我可以强制它再次解压缩文件?

4

1 回答 1

0

我猜你会得到某种“文件存在”-异常

尝试:

OpenFileDialog open = new OpenFileDialog();
open.Filter = "zip Datei (.zip)|*.zip";
open.RestoreDirectory = true;

if (open.ShowDialog() == DialogResult.OK)
{
  try
  {
    ZipFile zip = Ionic.Zip.ZipFile.Read(open.FileName);
    zip.ExtractAll(".\\");
    zip.Dispose();
  }
  catch (ZipException zex)
  {
    MessageBox.Show(zex.Message);
  }
}

或使用线程:

private void open()
{
    OpenFileDialog open = new OpenFileDialog();
    open.Filter = "zip Datei (.zip)|*.zip";
    open.RestoreDirectory = true;

    if (open.ShowDialog() == DialogResult.OK)
    {

            Thread t1 = new Thread
            (delegate()
            {
                try
                {
                    using (ZipFile zip = Ionic.Zip.ZipFile.Read(open.FileName))
                    {
                        zip.ExtractProgress += zip_ExtractProgress;
                        zip.ExtractAll(".\\", ExtractExistingFileAction.OverwriteSilently);
                    }
                }
                catch (ZipException zex)
                {
                    error(zex.Message);
                }
             });
            t1.IsBackground = true;
            t1.Start();

    }
}


private void zip_ExtractProgress(object sender, ExtractProgressEventArgs args)
{
     update(args.TotalBytesToTransfer, args.BytesTransferred);
}



private void update(long ueTotal, long done)
{

    if (this.InvokeRequired)
    {
        this.Invoke(new MethodInvoker(() => { update(ueTotal, done); }));
    }
    else
    {
        if (ueTotal > 0)
        {
            double prz = (100d / ueTotal) * done;
            lblProz.Text = prz.ToString("###.##");
        }
    }
}
于 2017-11-27T12:27:17.730 回答