2016-11-30 9 views
0

У меня есть файл JSON, и я собираюсь его zip с помощью DotNetZip. С помощью StreamWriter для zip он работает, если я пытаюсь использовать MemoryStream, он не будет работать.Использование MemoryStream и DotNetZip для zip-файла json

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 застегнуть его, Может ли один сказал мне, где есть ошибка?

+0

Это выглядит правильно. Вы уверены, что ваши пути установлены правильно? –

+0

Если я правильно понял, вы хотели «gzip' ваш' JSON', я прав? –

+0

@Leon Husmann Да, путь assetsFolder верен, '' zip.AddEntry' действительно создает область потока для сохранения этого json-файла? –

ответ

0

Чтобы создать с gzip'нутыми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); 
     } 
    } 
+0

Извините, у меня есть вопрос. GZipped требуется для создания реального файла для записи строки в поток, есть ли какой-либо метод без использования реального фильтра? В любом случае, спасибо за ваш ответ! –

+0

Не могли бы вы охарактеризовать больше? создать реальный файл? –