我正在尝试仅读取压缩的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文件。我也不想走遍字节数组的怪异路线,而不必从数组中重构第一行,因为这将需要知道第一行的确切内容(数据类型,分隔符等)。

谢谢

最佳答案

例如Matt,您可以执行以下操作来检出此代码示例
这使用SharpZipLib库

var zip = new ZipInputStream(File.OpenRead(@"C:\MyZips\myzip.zip"));
var filestream = new FileStream(@"C:\\MyZips\myzip.zip", FileMode.Open, FileAccess.Read);
ZipFile zipfile = new ZipFile(filestream);
ZipEntry item;
while ((item = zip.GetNextEntry()) != null)
{
     Console.WriteLine(item.Name);
     using (StreamReader s = new StreamReader(zipfile.GetInputStream(item)))
     {
      // stream with the file
          Console.WriteLine(s.ReadToEnd());
     }
 }

关于c# - C#使用压缩文本文件的StreamReader只读第一行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9382120/

10-11 22:31
查看更多