C# 如何将ReadAllLines与gzip文件一起使用
有没有一种方法可以在gzip文件上使用一行ReadAllLinesC# 如何将ReadAllLines与gzip文件一起使用,c#,gzip,file.readalllines,C#,Gzip,File.readalllines,有没有一种方法可以在gzip文件上使用一行ReadAllLines var pnDates = File.ReadAllLines("C:\myfile.gz"); 我可以如何在文件周围放置GZipStream包装器吗?没有内置的东西。您必须为自己编写一个小型实用程序函数。没有内置的功能。您必须自己编写一个小的实用函数。您必须首先对文件进行膨胀,因为gzip算法处理字节数据而不是文本,并包含CRC。这应该适合您: 编辑-由于某些原因,我无法发表评论,因此这是针对bytestocompress问
var pnDates = File.ReadAllLines("C:\myfile.gz");
我可以如何在文件周围放置GZipStream包装器吗?没有内置的东西。您必须为自己编写一个小型实用程序函数。没有内置的功能。您必须自己编写一个小的实用函数。您必须首先对文件进行膨胀,因为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);
由于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);
否,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();
}
}
}
}
否,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();
}
}
}
}
我不明白。你能解释清楚吗?你的问题是如何逐行阅读GZipStream吗?我不明白。你能解释清楚吗?你的问题是如何逐行阅读GZipStream?然后复制ReadLines,而不是ReadAllLines。然后复制ReadLines,而不是ReadAllLines。bytesToCompress从何而来?bytesToCompress从何而来?我对收益率不太熟悉。它似乎正在执行一个隐式whileline=reader.ReadLine=!空{返回行;}。我的想法对吗?看。它使该方法一次读取并返回一行,而不是一次读取内存中的整个文件。它似乎正在执行一个隐式whileline=reader.ReadLine=!空{返回行;}。我的想法对吗?看。它使该方法一次读取并返回一行,而不是一次读取内存中的整个文件。