Как проверить, был ли файл изменен с момента последнего чтения? (С #) - PullRequest
2 голосов
/ 18 июля 2010

У меня есть текстовый файл, который несколько экземпляров одного и того же приложения используют для синхронизации и обмена данными между собой. В двух словах, это простой текстовый файл, который содержит список файлов данных. Эти файлы данных приходят и уходят на регулярной основе.

Есть ли надежный способ узнать, что какое-либо приложение записало файл с момента его последнего чтения? Обычно вы будете использовать для этого дату изменения. Однако к файлу обращаются так часто, что он, вероятно, будет постоянно присутствовать в кеше памяти. Таким образом, существует вероятность того, что запись в файл не изменит дату модификации.

Есть ли другой способ узнать, что файл был изменен.

Я знаю об уведомлениях файловой системы, но не хотел бы использовать их здесь.

Программное обеспечение на C #, но, очевидно, я также могу использовать любую функцию WinAPI через InteropServices. Программное обеспечение работает на Windows Server 2008 R2. Файловая система NTFS. В идеале метод должен также работать на сетевых ресурсах.

Ответы [ 4 ]

2 голосов
/ 18 июля 2010

Одна интересная, но (AFAI) едва используемая особенность ntfs - это USN Journal, который вы можете прочитать. Он поддерживает список всех изменений в файловой системе. Единственная программа, которую я знаю, которая явно использует это Все. Но может случиться так, что FileSystemWatcher использует его внутренне. Большим преимуществом чтения этого журнала вручную является то, что вы можете определить изменения, которые произошли, когда ваша программа не работала.

1 голос
/ 18 июля 2010

Как насчет использования хеша (MD5 или SHA1 и т. Д.) Содержимого файла, чтобы определить, был ли файл изменен?

1 голос
/ 18 июля 2010

Может быть лучше использовать базу данных sql для этого.В противном случае вы должны организовать механизм транзакций для этого файла.

0 голосов
/ 18 июля 2010

Каждый раз, когда вы получаете доступ к файлу, сохраняйте его хэш (SHA2), а затем в будущем снова создайте хэш и сравните его с тем, что было сохранено ранее.

Простой и элегантный.

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