このコードを使用して、ファイルを部分的に圧縮しようとしました
using (var fsIn = new FileStream("test.avi", FileMode.Open))
{
using (var fsOut = new FileStream("test.avi.gz", FileMode.Create))
{
var buf = new byte[1024 * 1024];
using (var gzip = new GZipStream(fsOut, CompressionMode.Compress, true))
{
while (true)
{
var readCount = fsIn.Read(buf, 0, buf.Length);
if (readCount <= 0)
{
break;
}
gzip.Write(buf, 0, buf.Length);
gzip.Flush();
}
}
}
}
しかし、解凍後にファイルが破損しています。このコードは機能します
using (var fsIn = new FileStream("test.avi", FileMode.Open))
{
using (var fsOut = new FileStream("test.avi.gz", FileMode.Create))
{
var buf = new byte[1024*1024];
while (true)
{
var readCount = fsIn.Read(buf, 0, buf.Length);
if (readCount <= 0)
{
break;
}
// This string was transferred into "while" cycle
using (var gzip = new GZipStream(fsOut, CompressionMode.Compress, true))
{
gzip.Write(buf, 0, buf.Length);
}
}
}
}
gzip.Flush() が機能しないのはなぜですか? gzip.Close() だけが機能するのはなぜですか?