바이너리 기록기를 사용하여 몇 uint와 바이트 배열로 구성된 레코드를 파일에 쓰는 방법이 있습니다. 이 방법은 내 프로그램의 일부로 초당 약 12 번 실행됩니다.binarywriter가 스트림 끝 부분에 파일을 열지 않음
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();
위의 코드는 잘 작동하지만 내가 추구 호출로 라인을 제거하면, 결과 이진 파일이 손상되었습니다 : 코드는 다음과 같습니다. 예를 들어 대다수의 레코드가 잘 작성되었지만 일부 레코드가 완전히 없거나 일부만 존재합니다. 따라서 버그의 원인은 파일을 반복해서 열고 닫을 때 파일의 현재 위치가 항상 끝이 아니라 모든 것이 덮어 쓰기된다는 것입니다.
내 질문은 : 왜 파일을 열 때 C#이 현재 위치가 끝났음을 보장하지 않습니까?
PS : 나는 당신이 파일에 추가 할 경우이 버그
그걸 설명해, 건배 :) – CalumMcCall