0

How do I convert from a gzip compressed file to Zstandard? Here is my attempt:

using Zstandard.Net;

public static void ConvertToZstd(string path)
{
    byte[] compressed = null;
    using (var stream = new FileStream(path, FileMode.Open, FileAccess.Read))
    using (var gzipStream = new GZipStream(stream, CompressionMode.Decompress, false))
    using (var memoryStream = new MemoryStream())
    using (var compressionStream = new ZstandardStream(memoryStream, CompressionMode.Compress))
    {
        compressionStream.CompressionLevel = 11;               // optional!!
        //compressionStream.CompressionDictionary = dictionary;  // optional!!
        compressionStream.Write(gzipStream, 0, gzipStream.Length);
        compressionStream.Close();
        compressed = memoryStream.ToArray();
    }
}
BAR
  • 15,909
  • 27
  • 97
  • 185
  • I would split this code. First Decompress the gzip, see if that works, then compress to ZstandardStream. – Charles Dec 31 '21 at 03:33

1 Answers1

0
public static void ConvertToZstd(string path, string outputPath)
{
    using (var stream = new FileStream(path, FileMode.Open, FileAccess.Read))
    using (var gzipStream = new GZipStream(stream, CompressionMode.Decompress, false))
    using (var memoryStream = new MemoryStream())
    using (var compressionStream = new ZstandardStream(memoryStream, CompressionMode.Compress))
    {
        compressionStream.CompressionLevel = 11;               // optional!!
        //compressionStream.CompressionDictionary = dictionary;  // optional!!
        gzipStream.CopyTo(compressionStream);
        compressionStream.Close();
        File.WriteAllBytes(outputPath, memoryStream.ToArray());
    }
}
BAR
  • 15,909
  • 27
  • 97
  • 185
  • Instead of `compressionStream.Close();` you could move `File.WriteAllBytes` ouside the inner `using` block. – Poul Bak Dec 31 '21 at 21:09