Кто-нибудь знает, почему я получаю сообщение об ошибке «Неожиданный конец данных» при отключении gzip-файла?GZipStream делает gzipping, но ungzipping файл заканчивается «Неожиданным завершением данных»
Чтобы проверить, что данные в байтах не повреждены, я использую FooTest4.csv
для записи в файл и смог успешно открыть файл.
Оба «FooTest3.csv.gz» and 'FooTest2.csv.gz
столкнулись с «Неожиданным концом данных» при не-gzipping.
public static List<byte> CompressFile(List<byte> parmRawBytes)
{
//Initialize variables...
List<byte> returnModifiedBytes = null;
File.WriteAllBytes(@"X:\FooTest4.csv", parmRawBytes.ToArray());
using (var memoryStream = new MemoryStream())
{
using (var gzipStream = new GZipStream(memoryStream, CompressionMode.Compress, false))
{
gzipStream.Write(parmRawBytes.ToArray(), 0, parmRawBytes.ToArray().Length);
gzipStream.Flush();
File.WriteAllBytes(@"X:\FooTest3.csv.gz", memoryStream.ToArray());
returnModifiedBytes = memoryStream.ToArray().ToList();
}
}
File.WriteAllBytes(@"X:\FooTest2.csv.gz", returnModifiedBytes.ToArray());
return returnModifiedBytes;
}
Вы вызываете 'memoryStream.ToArray()' преждевременно: 'GZipStream.Dispose' записывает вещи в свой базовый поток. Удалите вызов 'gzipStream.Flush' (который является спорным) и вытащите вызов' memoryStream.ToArray() 'из-под внутреннего блока' using'. – ach
Потяните вызов 'memoryStream.ToArray()', что вы подразумеваете под этим? – fletchsod
Поместите его во внешний блок 'using', но вне внутреннего:' using (var memoryStream = ...) {using (var gzipStream = ...) {gzipStream.Write (...); } memoryStream.ToArray(); } '. – ach