J'ai une méthode qui utilise un binaire pour écrire un enregistrement composé de quelques uints et un tableau d'octets dans un fichier. Cette méthode s'exécute environ une douzaine de fois par seconde dans le cadre de mon programme. Le code est ci-dessous:binarywriter ne pas ouvrir le fichier à la fin du flux
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();
Le code ci-dessus fonctionne très bien, mais si je retire la ligne à la recherche appel, le fichier binaire résultant est corrompu. Par exemple, certains enregistrements sont complètement absents ou des parties de ceux-ci ne sont tout simplement pas présents bien que la grande majorité des enregistrements soient écrits correctement. Donc, j'imagine que la cause du bug est quand j'ouvre et ferme le fichier à plusieurs reprises la position actuelle dans le fichier n'est pas toujours à la fin et les choses sont écrasées. Donc, ma question est la suivante: pourquoi C# n'assure-t-il pas que la position actuelle est à la fin lorsque j'ouvre le fichier?
PS: J'ai écarté les questions de filetage de causer ce bug
Cela explique, acclamations :) – CalumMcCall