C#只读取第一行,使用压缩文本文件的StreamReader

时间:2012-02-21 17:24:23

标签: c# streamreader text-files zipfile compression

我试图只读取压缩的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文件。我也不想通过字节数组走这条令人讨厌的路线,不得不重新构建数组的第一行,因为它需要知道第一行的确切内容(数据类型,分隔符......)。

由于

2 个答案:

答案 0 :(得分:1)

例如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());
     }
 }

答案 1 :(得分:-1)

上面的答案对我没有用(它在运行时输入了一个错误:“item”的nullreference)所以我稍微修改了一下代码。(一个名为“text.txt”的文本文件压缩成一个名为“archive”的zip文件.zip“)这个是在VB.NET中使用SHARPZIPLIB库(你必须将它导入VB并在公共类mainform之前调用它。

这是代码:

       Imports ICSharpCode.SharpZipLib.Zip

'现在将以下代码放入私有子(我将其置于私人子按钮_click)

       Dim zip As New ZipInputStream(File.OpenRead("c:\archive.zip")) 'location of the zip file
       Dim filestream As New FileStream("c:\archive.zip", FileMode.Open,FileAccess.Read)
        Dim zipfile As ZipFile = New ZipFile(filestream)

        Dim item As ICSharpCode.SharpZipLib.Zip.ZipEntry
        item = New ZipEntry("text.txt")

        While (Not (zip.GetNextEntry) Is Nothing)
            Console.WriteLine(item.Name)
            Dim s As StreamReader = New StreamReader(zipfile.GetInputStream(item))
            ' stream with the file
            MsgBox(s.Readline)

        End While
        end sub

当您运行代码时,将弹出消息框,其中包含在文本文件text.txt的第一行中输入的文本 希望这可以帮助。干杯!