我正在压缩一个日志文件,因为数据被写入其中,例如:
using (var fs = new FileStream("Test.gz", FileMode.Create, FileAccess.Write, FileShare.None))
{
using (var compress = new GZipStream(fs, CompressionMode.Compress))
{
for (int i = 0; i < 1000000; i++)
{
// Clearly this isn't what is happening in production, just
// a simply example
byte[] message = RandomBytes();
compress.Write(message, 0, message.Length);
// Flush to disk (in production we will do this every x lines,
// or x milliseconds, whichever comes first)
if (i % 20 == 0)
{
compress.Flush();
}
}
}
}
我要确保的是,如果进程崩溃或被杀死,存档仍然有效且可读。我曾希望自上次刷新以来的任何内容都是安全的,但我最终只是得到了一个损坏的存档。
有什么方法可以确保我在每次刷新后都得到一个可读的存档?
注意:我们不必使用 GZipStream,如果其他东西会给我们想要的结果。