如何将 ReadAllLines 与 gzip 文件一起使用

本文关键字:文件 一起 gzip ReadAllLines | 更新日期: 2023-09-27 18:32:07

有没有办法在压缩文件上使用单行 ReadAllLines?

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

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

如何将 ReadAllLines 与 gzip 文件一起使用

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

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

没有内置这样的东西。你必须给自己写一个小的实用程序函数。

您必须先对文件进行膨胀,因为 gzip 的算法处理字节数据而不是文本并合并 CRC。这应该适合您:编辑 - 由于某种原因我无法发表评论,所以如果对于字节压缩问题,这是


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);