Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将ReadAllLines与gzip文件一起使用_C#_Gzip_File.readalllines - Fatal编程技术网

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

C# 如何将ReadAllLines与gzip文件一起使用,c#,gzip,file.readalllines,C#,Gzip,File.readalllines,有没有一种方法可以在gzip文件上使用一行ReadAllLines var pnDates = File.ReadAllLines("C:\myfile.gz"); 我可以如何在文件周围放置GZipStream包装器吗?没有内置的东西。您必须为自己编写一个小型实用程序函数。没有内置的功能。您必须自己编写一个小的实用函数。您必须首先对文件进行膨胀,因为gzip算法处理字节数据而不是文本,并包含CRC。这应该适合您: 编辑-由于某些原因,我无法发表评论,因此这是针对bytestocompress问

有没有一种方法可以在gzip文件上使用一行ReadAllLines

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=!空{返回行;}。我的想法对吗?看。它使该方法一次读取并返回一行,而不是一次读取内存中的整个文件。