【发布时间】:2014-09-22 09:48:47
【问题描述】:
我正在使用 .NET 4.5,如果我尝试使用“CreateFromDirectory”压缩整个目录,则 ZipFile 类效果很好。但是,我只想压缩目录中的一个文件。我尝试指向特定文件(文件夹\data.txt),但这不起作用。我考虑了 ZipArchive 类,因为它有一个“CreateEntryFromFile”方法,但似乎这只允许您在现有文件中创建一个条目。
有没有办法简单地压缩一个文件而不创建一个空的压缩文件(这有它的问题),然后使用 ZipArchiveExtension 的“CreateEntryFromFile”方法?
**这也是假设我正在开发一个目前无法使用第三方插件的公司程序。
示例来自:http://msdn.microsoft.com/en-us/library/ms404280%28v=vs.110%29.aspx
string startPath = @"c:\example\start";
string zipPath = @"c:\example\result.zip";
string extractPath = @"c:\example\extract";
ZipFile.CreateFromDirectory(startPath, zipPath);
ZipFile.ExtractToDirectory(zipPath, extractPath);
但如果 startPath 为@"c:\example\start\myFile.txt;",则会抛出目录无效的错误。
【问题讨论】:
-
but that doesn't work什么不起作用?你的代码在哪里? -
指向特定文件不适用于“CreateFromDirectory”。我将微软示例添加到原始问题中。
-
您可以使用 ZipArchive 类创建一个新的 Zip 存档,尽管它并不完全是单行的。请参阅answer here 了解如何操作。 (如果这太麻烦,您可能会考虑使用更好的 3rd-party 库来处理 ZIP,例如DotNetZip)
-
或者您可以将文件移动到临时文件夹进行压缩,并在删除后提取到同一个临时文件夹?最好的解决方案是获得更好的库。
-
@elgonzo 我提到我不能使用 3rd-party 解决方案,但感谢您的建议。似乎引用答案中的人正在尝试从头开始创建新文件并写入流,但我会尝试从那里找到解决方案。谢谢。