fflush на стандартный вывод

У меня есть настройка объекта FileSystemWatcher для отслеживания изменений в файле журнала, написанном консольным приложением. Фильтр уведомлений установлен следующим образом: watcher.NotifyFilter = NotifyFilters.Size | NotifyFilters.LastWrite | NotifyFilters.LastAccess; Окружение: ОС: сервер Win 2k8.

Код консольного приложения, который выгружается на стандартный вывод, перенаправляется в файл out.log:

void MySet::Dump() { std::cout ‹‹ this ‹‹ endl; сбросить (стандартный вывод); }

После того, как я запускаю дамп (в непосредственном окне отладчика), размер файла остается прежним. Если я запускаю команду «тип», кажется, что обновление происходит. Есть идеи

c:\temp> dir 21.05.2010 11:11 4159 out.log

После сброса: (без изменений)

c:\temp> dir 21.05.2010 11:11 4159 out.log

Запустите команду "тип"...

c:\temp>type out.log Файл теперь имеет новый размер ... c:\temp> dir 21/05/2010 11:11 4410 out.log

Почему такое поведение? Я что-то упустил здесь? Заранее спасибо.


person user85917    schedule 21.05.2010    source источник


Ответы (1)


http://msdn.microsoft.com/en-us/library/ms724290(VS.85).aspx

Временные метки обновляются в разное время и по разным причинам. Единственная гарантия относительно метки времени файла заключается в том, что время файла правильно отображается, когда дескриптор, который вносит изменение, закрывается.

Поэтому, если вы только сбрасываете, а не закрываете, то не гарантируется, что все, что просматривает последнее изменение времени файла записи, будет запущено.

person Pete Kirkham    schedule 21.05.2010
comment
Спасибо за ответ. Я попробовал fclose, но это закроет файл для последующей записи, т. е. fclose не вариант. Какие другие критерии (кроме размера) следует использовать для фильтра уведомлений? - person user85917; 21.05.2010
comment
Ну а что кроме размера меняется? Это может быть единственный вариант, хотя, опять же, он не обязательно будет обновляться до закрытия. Возможно, вы сможете принудительно выполнить обновление, открыв и закрыв дескриптор для чтения (что и делает тип), но это не гарантируется. - person Pete Kirkham; 21.05.2010