gzipファイルを解凍すると「予期しないデータの終了」というエラーメッセージが表示されるのは誰か知っていますか?GZipStreamはgzipしていますが、ungzippingファイルの末尾が「予期しないデータの末尾」
バイトデータが破損していないことを確認するには、FooTest4.csv
を使用してファイルに書き込み、ファイルを正常に開くことができました。
「FooTest3.csv.gz and 'FooTest2.csv.gz
」の両方が、「gzip」を解除すると「予期しないデータの終了」に遭遇しました。
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'(moot)への呼び出しを取り除き、内側の' using'ブロックの下から 'memoryStream.ToArray()'へ呼び出しを引きます。 – ach
'memoryStream.ToArray()'を呼び出すと、それはどういう意味ですか? – fletchsod
それを外側の 'using'ブロックの内側に置きますが、内側の外側に置いてください:' using(var memoryStream = ...){using(var gzipStream = ...){gzipStream.Write(...);} } memoryStream.ToArray(); } '。 – ach