Сброс журнала на диск, исключение в VerifyOSHandlePosition

Как я могу записать файл журнала из службы C #, чтобы он своевременно записывался на диск?

Вот что я попробовал. В журнале регистрации я открыл файл примерно так:

var file = return File.Open(name, FileMode.Append, 
                            FileAccess.Write, FileShare.Read);
var writer = new StreamWriter(file);

и написал ему так:

writer.WriteLine(msg);
writer.Flush();
file.Flush();

Однако журнал не был сброшен на диск своевременно. Поэтому я попытался добавить 5-секундный таймер, который делает это:

[DllImport("kernel32.dll")]
static extern bool FlushFileBuffers(IntPtr hFile);

file.Flush();
var hdl = file.SafeFileHandle;
FlushFileBuffers(hdl.DangerousGetHandle());

Кажется, это работает, но через редкие интервалы я получаю следующее исключение:

System.IO.IOException: The OS handle's position is not what FileStream expected. Do not use a handle simultaneously in one FileStream and in Win32 code or another FileStream. This may cause data loss.

at System.IO.FileStream.VerifyOSHandlePosition()

Есть ли лучший способ вызвать флеш?

Ответы на вопрос(1)

Ваш ответ на вопрос