【发布时间】:2010-07-03 07:03:25
【问题描述】:
我压缩了数百个 CSV 文件。这很棒,因为它们占用的空间很小,但是当需要使用它们时,我必须在我的 HD 上腾出一些空间并解压缩它们,然后才能进行处理。我想知道 .NET 是否可以在阅读文件时解压缩文件。换句话说,我想打开一个 zip 文件,开始解压缩文件,然后处理文件。
所以我的驱动器上不需要额外的空间。有什么想法或建议吗?
【问题讨论】:
标签: c# compression c#-4.0 zip
我压缩了数百个 CSV 文件。这很棒,因为它们占用的空间很小,但是当需要使用它们时,我必须在我的 HD 上腾出一些空间并解压缩它们,然后才能进行处理。我想知道 .NET 是否可以在阅读文件时解压缩文件。换句话说,我想打开一个 zip 文件,开始解压缩文件,然后处理文件。
所以我的驱动器上不需要额外的空间。有什么想法或建议吗?
【问题讨论】:
标签: c# compression c#-4.0 zip
是的。 Zip 是一种流格式,这意味着您可以在解压缩时使用数据,而不必先解压缩所有内容。
使用 .net 的 System.IO.Compression 类,您可以将 zip 文件(Deflate 和 GZip)中使用的类似压缩应用于您喜欢的任何流,但如果您想使用实际的 zip 格式文件,则需要第三个方库like this one (sharpziplib)。
【讨论】:
更好的解决方案可能是将文件解压缩在驱动器上,但在文件系统级别打开压缩。这样,您将只读取 CSV 文件,操作系统会确保它不会占用太多空间。
Anyhoo,回答您的问题,也许GZipStream class 可以帮助您。
【讨论】:
sharpziplib 允许基于流的解压缩 - 请参阅 this related question - item 提供类似的基于流的 Read 方法,因此您可以像处理任何流一样处理每个项目。
【讨论】:
我不确定 zip 文件,但您可以使用带有 GZipSteam 的 GZ 格式(与任何其他输入流一样工作)。不幸的是,整个 System.IO.Compression 命名空间只有 2 个类(另一个是 DEFLATE)。
编辑:有一个名为ZipPackage 的类。我不确定它是否能让你进行解压流式传输,但它可能值得研究。
另外,看看#ziplib。
【讨论】: