ExtractToFile与ExtractToDirectory

时间:2014-11-06 14:40:07

标签: c# file-io extraction

我有一些代码将文件解压缩到目录。在下面的代码中,Global.fullpath是文件的完整路径,其中Global.path是目录的路径。此代码有效:

 private void backgroundWorker2_DoWork(object sender, DoWorkEventArgs e)
    {
        AppendTextBox("Extracting Files...\r\n");
        ZipFile.ExtractToDirectory(Global.fullPath, Global.path);
    }

但是,如果存在任何文件,我正在尝试覆盖,所以我有这个代码,即使没有现有文件也似乎无法提取任何内容:

 private void backgroundWorker2_DoWork(object sender, DoWorkEventArgs e)
    {
        AppendTextBox("Extracting Files...\r\n");
        using (ZipArchive archive = ZipFile.OpenRead(Global.fullPath))
        {
            foreach (ZipArchiveEntry entry in archive.Entries)
            {
                AppendTextBox("Extracting file: " + entry.FullName + "...\r\n");
                entry.ExtractToFile(Path.Combine(Global.path, entry.FullName), true);
            }
        }

    }

2 个答案:

答案 0 :(得分:0)

确保检查组合路径是否为有效文件名。 ExtractToFile方法需要以文件名结尾的路径,而某些Zip存档可以包含文件夹。在这种情况下,entry.FullName属性会导致无效路径。

答案 1 :(得分:0)

根据评论,如果您尝试提取目录ExtractToFile(),则不会按预期执行。目录不能像文件一样容易被覆盖。我认为你有两个选择:

  1. 检查FullName指定的目录是否存在,并在写入之前将其删除。

  2. 检查FullName指定的目录是否存在,然后将您要编写的文件夹重命名为FullName = FullName + "_Copy";