【发布时间】:2015-01-24 16:51:04
【问题描述】:
有没有办法在 gzip 压缩文件上使用单行 ReadAllLines?
var pnDates = File.ReadAllLines("C:\myfile.gz");
我可以在文件周围放置 GZipStream 包装器吗?
【问题讨论】:
-
我不明白。你能解释得更好吗?你的问题是如何逐行阅读
GZipStream?
标签: c# gzip file.readalllines
有没有办法在 gzip 压缩文件上使用单行 ReadAllLines?
var pnDates = File.ReadAllLines("C:\myfile.gz");
我可以在文件周围放置 GZipStream 包装器吗?
【问题讨论】:
GZipStream?
标签: c# gzip file.readalllines
没有内置这样的东西。您必须自己编写一个小型实用函数。
【讨论】:
您必须先扩充文件,因为 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);
【讨论】:
bytesToCompress从何而来?
不,File.ReadAllLines() 将指定的文件视为文本文件。 zipfile 不是这样的。自己做很简单:
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();
}
}
}
}
【讨论】: