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

本文关键字:压缩 文本 文件 StreamReader 一行 只读 | 更新日期: 2023-09-27 18:25:15

我试图只读取压缩的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文件。我也不想走字节数组的怪癖路线,不得不从数组中重建第一行,因为这需要了解第一行的确切内容(数据类型、分隔符…)

感谢

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

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

上面的答案对我不起作用(它在运行时抛出了一个错误:"item"的null引用),所以我稍微修改了代码。(一个名为"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的第一行中输入的文本希望这能有所帮助。干杯