当尝试使用ZipFile类时,出现了System.IO.Compression错误。

4

我正在使用ZipFile类。

为了使用这个类,必须添加一个参考/ dll。看起来你可以同时使用System.IO.Compression和Ionic.Zip dll(当然一次只能用一个)。

在我的情况下,只有后者起作用。问题是,Ionic.Zip似乎没有ExtracToFile(...)方法,它可以覆盖现有文件。我非常需要这个方法。 相反,我只能做:

zip.Extract(extractDirectory); (然后会收到一个错误,说该文件已经存在)

如果我做:

zip.ExtractToFile(extractDirectory);

我遇到了一个错误,提示方法ExtractToFile不存在。

另外需要注意的是,当我使用 Using System.IO.Compression 时,执行以下操作会出现错误:

var zip = ZipFile.Read(finalFileToUnzip)

这段代码提示找不到ZipFile(虽然我已经将dll添加为引用,通过 "Add Reference -> 选择.dll文件")

如果我使用Using Ionic.Zip,它会接受:var zip = ZipFile.Read(finalFileToUnzip)

我找不到任何关于这个问题的信息或之前的帖子,希望有人能帮忙

你有什么想法可能是问题所在吗?

以下是更多的代码:

for (int i = 0; i < listWithZipToUnpack.Count; ++i)
{
    extractDirectory = Path.Combine(projectPath.ToString(), pathDir + listWithZipToUnpack[i]);

    var finalFileToUnzip = Path.Combine(projectPath.ToString(), pathDir, "Lely", listWithZipToUnpack[i]);

    if (finalFileToUnzip.Equals("--Vælg fil--")) { continue; }

    using (var zip = ZipFile.OpenRead(finalFileToUnzip))
    {
        if (!Directory.Exists(extractDirectory))
        {
            Directory.CreateDirectory(extractDirectory+"-"+listWithZipToUnpack[i]);
        }

        foreach (var zipArchiveEntry in zip.Entries)
        {
            zipArchiveEntry.ExtractToFile(extractDirectory);
        }
    }
}

我正在使用 .NET Framework 4.5.2。

2
“ZipFile” 在 .NET 4.5 中被添加… 您使用的框架版本是哪个? - Jon Skeet
听起来你这里有一个“路径”问题,你能展示一下你是如何分配需要压缩的文件/文件路径的内容吗? - MethodMan
我正在使用 .NET 的 4.5.2 版本。 我编辑了代码并添加了更多的代码。 - user1960836
你在询问什么具体的问题?是编译错误吗?还是执行时出现了错误?你能告诉我们你得到了什么错误,以及在哪里出现了吗? - Jim Mischel
1
没有完整的代码示例,很难说出问题出在哪里。你发布的代码应该可以编译通过,如果不能,那么可能是你在问题描述中省略了一些细节。话虽如此,我要指出的是,即使你成功编译了这段代码,它仍然无法正常工作,因为你将目录名作为文件名传递给了ExtractToFile()方法。对于每个归档条目,你需要将目录名与条目名组合起来,以获取用于保存文件的文件名。 - Peter Duniho
显示剩余3条评论
1个回答

11

我解决了它。问题在于仅将System.IO.Compression添加到引用中是不够的,还必须添加System.IO.Compression.Filesystem


1
所以你必须将它添加为引用。 - Matix
是的,需要引用。但在using语句中不需要。 - tim.newport

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接