簡體   English   中英

使用MemoryStream和DotNetZip壓縮json文件

[英]Using MemoryStream and DotNetZip to zip a json file

我創建了一個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);

MemoryStream:

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文件類型對其進行壓縮,有人可以告訴我哪里有錯誤嗎?

要創建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);
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM