我如何使用带有gzip压缩文件的ReadAllLines

时间:2014-11-26 11:19:34

标签: c# gzip file.readalllines

有没有办法在gzip压缩文件上使用单线程ReadAllLines?

var pnDates = File.ReadAllLines("C:\myfile.gz");

我可以将GZipStream包装器放在文件周围吗?

3 个答案:

答案 0 :(得分:4)

不,File.ReadAllLines()将指定为文本文件的文件视为。 zip文件不是这样的。自己做这件事是微不足道的:

public IEnumerable<string> ReadAllZippedLines(string filename)
{
    using (var fileStream = File.OpenRead(filename))
    {
        using (var gzipStream = new GZipStream(fileStream, CompressionMode.Decompress))
        {
            using (var reader = new StreamReader(gzipStream)) 
            {
                yield return reader.ReadLine();
            }
        }
    }
}

答案 1 :(得分:0)

内置没有这样的东西。你必须自己写一个小实用功能。

答案 2 :(得分:0)

你必须先扩充文件,因为gzip的算法处理字节数据而不是文本并包含CRC。这应该适合你: 编辑 - 由于某种原因,我无法发表评论,所以这是针对bytestocompress的问题


byte[] decompressedBytes = new byte[4096];
using (FileStream fileToDecompress = File.Open("C:\myfile.gz", FileMode.Open))
{
    using (GZipStream decompressionStream = new GZipStream(fileToDecompress, CompressionMode.Decompress))
    {
        decompressionStream.Read(decompressedBytes, 0, bytesToCompress.Length);
    }
}
var pnDates = System.Text.Encoding.UTF8.GetString(decompressedBytes);