C #: Как проверить, был ли обновлен открытый файл

Вы знаете эту функцию, например, вы открыли C:\test.txt, если у вас есть такой же файл в другом редакторе, и вы редактируете его там, когда вы вернетесь, приложение предложит, что файл был изменен, хотите ли вы его обновить. Как проверить, обновлен ли файл?

ОБНОВЛЕНИЕ

Задал родственный вопрос «Использование FileSystemWatcher для отслеживания изменений в файлах "


person Jiew Meng    schedule 19.10.2010    source источник
comment
ознакомьтесь с наблюдателем за файлами   -  person Matt Ellen    schedule 19.10.2010
comment
Возможно, связанный вопрос, который отвечает больше, чем вы просите, но, вероятно, поможет в том, что вы пытаетесь сделать: stackoverflow.com/questions/239988/   -  person Benjol    schedule 19.10.2010
comment
@benjol: ваш связанный вопрос точно отражает мой опыт.   -  person Eamon Nerbonne    schedule 19.10.2010
comment
Не используйте filewatcher, потому что вы попадете в царство боли, которое вам, вероятно, не захочется. Опросите файл на предмет изменений - сначала посмотрите дату, затем размер, а затем содержание.   -  person Daniel Mošmondor    schedule 19.10.2010
comment
@ Даниэль Мошмондор, это будет очень медленно?   -  person Jiew Meng    schedule 19.10.2010
comment
@Daniel Mošmondor, думаю, для меня это не должно быть проблемой :) Я создаю что-то вроде текстового редактора. но просто любопытно   -  person Jiew Meng    schedule 19.10.2010
comment
Кроме того, я только что обнаружил, что FileSystemWatcher у меня не работает ... см. родственный вопрос для получения обновлений   -  person Jiew Meng    schedule 19.10.2010


Ответы (3)


Вы можете использовать FileSystemWatcher для получения уведомлений от файловой системы.

person Darin Dimitrov    schedule 19.10.2010

Вы можете использовать FileSystemWatcher или опросить для изменений в подходящий момент.

Обратите внимание, что FileSystemWatcher может пропустить изменения при большой нагрузке и равен IDisposable. Неспособность утилизировать его должным образом может вызвать проблемы со стабильностью (что лично у меня случалось). Если вы выберете опрос, обратите внимание, что FileInfo кэширует некоторые метаданные, поэтому вам нужно будет вызвать метод FileInfo.Refresh, если вы повторно используете FileInfo объекты. Или используйте File API.

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

person Eamon Nerbonne    schedule 19.10.2010
comment
Нет, вам не нужно воссоздавать FileInfo, просто вызовите .Refresh (), чтобы заставить его перечитать - person Onkelborg; 19.10.2010

Либо используйте FileSystemWatcher (предпочтительно), либо сравните последний измененный Дата периодически.

person Vilx-    schedule 19.10.2010