使用GZipStream将文本文件写入gz文件,而无需先将文本文件写入磁盘

Cat*_*lMF 0 c# compression stream gzipstream

我目前正在从几个数据库查询中生成大量输出.生成的XML文件大约为2GB.(这是一年的数据).为了节省一些磁盘空间和客户端的下载时间,我使用GZipStream类将此文件添加到压缩文件中.请参阅下文,了解我目前如何将文件压缩为gz.注意:fi对象是FileInfo.

using (FileStream inFile = fi.OpenRead())
using (FileStream outFile = File.Create(fi.FullName + ".gz"))
using (GZipStream Compress = new GZipStream(outFile, CompressionMode.Compress))
{
    byte[] buffer = new byte[65536];
    int numRead;
    while ((numRead = inFile.Read(buffer, 0, buffer.Length)) != 0)
    {
        Compress.Write(buffer, 0, numRead);
    }
}
Run Code Online (Sandbox Code Playgroud)

这种方法工作正常,但要求我将2GB文本文件写入磁盘,然后再将其全部读回来,以便将其添加到GZipStream中,然后将其作为压缩文件再次写回.这似乎是浪费时间.

有没有办法直接将我的2GB字符串添加到GZipStream而无需先写入磁盘?

juh*_*arr 7

你可以创建一个StreamWriter(或者在你的情况下可能是一个XmlWriter)GZipStream而只是写入它.

using (FileStream outFile = File.Create(fi.FullName + ".gz"))
using (GZipStream compress = new GZipStream(outFile, CompressionMode.Compress))
using (StreamWriter writer = new StreamWriter(compress))
{
    foreach(string line in GetLines())
        writer.WriteLine(line);
}
Run Code Online (Sandbox Code Playgroud)