【问题标题】:Using MemoryStream and DotNetZip to zip a json file使用 MemoryStream 和 DotNetZip 压缩 json 文件
【发布时间】:2016-11-30 14:55:58
【问题描述】:

我创建了一个 JSON 文件,我将使用 DotNetZip 对其进行压缩。 使用 StreamWriter 压缩它可以工作,如果我尝试使用 MemoryStream 它将无法工作。

StreamWriter :

sw = new StreamWriter(assetsFolder + @"manifest.json");
sw.Write(strManifest);
sw.Close();
zip.AddFile(Path.Combine(assetsFolder, "manifest.json"), "/");
zip.AddFile(Path.Combine(assetsFolder, "XXXXXXX"), "/");
zip.Save(outputStream);

内存流:

var manifestStream = GenerateStreamFromString(strManifest);
public static Stream GenerateStreamFromString(string s)
{
    MemoryStream stream = new MemoryStream();
    StreamWriter writer = new StreamWriter(stream);
    writer.Write(s);
    writer.Flush();
    stream.Position = 0;
    return stream;
}
zip.AddEntry("manifest.json", manifestStream);  
zip.AddFile(Path.Combine(assetsFolder, "XXXXXXX"), "/");
zip.Save(outputStream);

我必须使用.JSON文件类型来压缩它,谁能告诉我哪里有错误?

【问题讨论】:

  • 看起来是正确的。您确定您的路径设置正确吗?
  • 如果我理解正确你想gzip你的JSON,对吗?
  • @Leon Husmann 是的 assetsFolder 的路径是正确的,zip.AddEntry 真的创建了一个流区域来保存那个 json 文件吗?
  • @Ali 是的,你是对的
  • @YukwongTsang 是的,应该。你可以试试这个:DotNetZip Examples

标签: c# json memorystream dotnetzip


【解决方案1】:

要创建 Gzipped Json,您需要使用 GZipStream。试试下面的方法。

https://www.dotnetperls.com/gzipstream

GZipStream 压缩数据。它可以有效地保存数据——例如在 压缩的日志文件。我们用 C# 语言开发了一个实用方法 使用 System.IO.Compression 命名空间。它创建 GZIP 文件。 它将它们写入磁盘。

    public static void CompressStringToFile(string fileName, string value)
    {
        // A.
        // Write string to temporary file.
        string temp = Path.GetTempFileName();
        File.WriteAllText(temp, value);

        // B.
        // Read file into byte array buffer.
        byte[] b;
        using (FileStream f = new FileStream(temp, FileMode.Open))
        {
            b = new byte[f.Length];
            f.Read(b, 0, (int)f.Length);
        }

        // C.
        // Use GZipStream to write compressed bytes to target file.
        using (FileStream f2 = new FileStream(fileName, FileMode.Create))
        using (GZipStream gz = new GZipStream(f2, CompressionMode.Compress, false))
        {
            gz.Write(b, 0, b.Length);
        }
    }

【讨论】:

  • 对不起,我有一个问题。 GZipped 需要创建一个真实文件来将字符串写入流,有没有不使用真实文件流的方法?无论如何,谢谢您的回复!
  • 您能描述更多吗?创建一个真实的文件?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多