【发布时间】:2012-02-21 17:24:23
【问题描述】:
我正在尝试仅读取压缩 csv 文件的第一行。我使用了下面的代码,但收到错误“GZIP 标头中的幻数不正确”。显然,这与 GZIP 和 ZIP 格式不同这一事实有关,但即使使用 DotNetZipLib 库或 SharpZip,我似乎也无法正常工作。
using (GZipStream gzipStream = new GZipStream(File.OpenRead(fileName), CompressionMode.Decompress))
{
using(StreamReader sr = new StreamReader(gzipStream))
{
//Matt try something like this as a hint / starting point
While(sr.Read())
{
row = sr.ReadLine();
}
}
}
你们中有人知道如何处理标准 zip 文件(不是 gzip)并将内容流式传输到 StreamReader 对象,以便我可以轻松读取压缩文本文件的第一行吗?我不寻找在打开文本文件之前完全解压缩整个 zip 文件的解决方案。我寻找与上述类似的解决方案,但可以处理 zip 文件。我也不想通过字节数组走令人讨厌的路线,并且不得不从数组中重建第一行,因为它需要了解第一行的确切内容(数据类型、分隔符......)。
谢谢
【问题讨论】:
-
所以你告诉我们的错误是因为GZip和Zip不一样,你知道的。当您使用 DotNetZipLib 或 SharpZip 时会发生什么?
-
尝试谷歌搜索“C#how to read compressed file using a StreamReader”有很多例子马特
-
GZip 和 Zip 不是一回事。您肯定需要使用 DotNetZipLib 或 SharpZip 之类的东西。您能否发布您尝试使用的代码,也许我们可以为您提供建议?
-
我试过但没有看到这些库能够流式传输到 StreamReader。也许我错过了一些东西。我必须先完全解压缩,才能读取 zip 文件的第一行。
-
我会为你做一个谷歌搜索并发布一个链接 抓紧这里是一个指向 DotNetZip 库的链接dotnetzip.codeplex.com
标签: c# streamreader text-files zipfile compression