Я пытаюсь сжать файлы JSON с помощью сжатия Gzip для отправки в другое место. Он должен обрабатывать 5 000–10 000 файлов в день, и мне не нужна сжатая версия файла на локальном компьютере (на самом деле они передаются в AWS S3 для долгосрочного архивирования).
Поскольку они мне не нужны, я пытаюсь сжать в поток памяти, а затем использовать его для записи в AWS, а не сжимать каждый из них на диск. Всякий раз, когда я пытаюсь это сделать, файлы ломаются (например, когда я открываю их в 7-Zip и пытаюсь открыть файл JSON внутри, я получаю сообщение «Файл ошибки данных поврежден»).
То же самое происходит, когда я пытаюсь записать поток памяти в локальный файл, поэтому я пока пытаюсь решить эту проблему. Вот код:
string[] files = Directory.GetFiles(@"C:\JSON_Logs");
foreach(string file in files)
{
FileInfo fileToCompress = new FileInfo(file);
using (FileStream originalFileStream = fileToCompress.OpenRead())
{
using (MemoryStream compressedMemStream = new MemoryStream())
{
using (GZipStream compressionStream = new GZipStream(compressedMemStream, CompressionMode.Compress))
{
originalFileStream.CopyTo(compressionStream);
compressedMemStream.Seek(0, SeekOrigin.Begin);
FileStream compressedFileStream = File.Create(fileToCompress.FullName + ".gz");
//Eventually this will be the AWS transfer, but that's not important here
compressedMemStream.WriteTo(compressedFileStream);
}
}
}
}