флеш на стандартный вывод - PullRequest
0 голосов
/ 21 мая 2010

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

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

void MySet :: Dump () { std :: cout << this << endl; fflush (стандартный вывод); } </p>

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

c: \ temp> dir 21.05.2010 11:11 4:59 out.log

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

c: \ temp> dir 21.05.2010 11:11 4:59 out.log

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

c: \ temp> type out.log Файл теперь имеет новый размер ... c: \ temp> dir 21.05.2010 11:11 4:10 out.log

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

1 Ответ

0 голосов
/ 21 мая 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...