二进制文件不在流的末尾打开文件
我有一个方法,它使用二进制写入器将包含少量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:我已经排除了导致此错误的线程问题
没有找到相关结果
已邀请:
2 个回复
香腔弥胯瓤
孝箱捆讨