我有一种方法,它使用二进制写入器将由少数 uint 和字节数组组成的记录写入文件。作为我程序的一部分,此方法每秒执行大约十几次。代码如下:
iLogFileMutex.WaitOne();
using (BinaryWriter iBinaryWriter = new BinaryWriter(File.Open(iMainLogFilename, FileMode.OpenOrCreate, FileAccess.Write)))
{
iBinaryWriter.Seek(0, SeekOrigin.End);
foreach (ViewerRecord vR in aViewerRecords)
{
iBinaryWriter.Write(vR.Id);
iBinaryWriter.Write(vR.Timestamp);
iBinaryWriter.Write(vR.PayloadLength);
iBinaryWriter.Write(vR.Payload);
}
}
iLogFileMutex.ReleaseMutex();
上面的代码工作正常,但如果我用 seek 调用删除该行,生成的二进制文件就会损坏。例如,某些记录完全丢失或部分记录不存在,尽管绝大多数记录都写得很好。所以我想这个错误的原因是当我反复打开和关闭文件时,文件中的当前位置并不总是在最后,事情会被覆盖。
所以我的问题是:当我打开文件时,为什么 C# 不能确保当前位置位于末尾?
PS:我已排除线程问题导致此错误