Страницы

Поиск по вопросам

воскресенье, 7 апреля 2019 г.

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

Сейчас при первом запуске программы я считаю хэш файла, сохраняю его и во время второго запуска просто сравниваю его со вновь посчитанным. Проблема в том, что это долго. Хотелось бы уметь проверять файл на изменения без подсчёта хэша. Тут можно было бы запоминать время последнего изменения, но никто не гарантирует, что файл не заменят другим файлом с таким же временем последнего изменения. Такие гарантии можно было бы получить запоминанием inode, но пока я не могу найти как в C# по имени файла получить inode. Да и работать это будет не на всех файловых системах. Как лучше всего решить эту проблему? Как это делает, например, Dropbox?


Ответ

Я бы посоветовал просто проверить дату последнего изменения. Объясняю, почему. Если вы хотите выяснить, изменился ли файл обычным образом -- то есть, не редактировал ли его кто-то, проверки даты должно быть достаточно. Это -- правильный, честный способ. Если же вы хотите переиграть злонамеренного пользователя, то вы уже проиграли: он может сделать что угодно, выставить любую дату изменения, подменить контрольную сумму, которую ваша программа где-то хранит, подменить содержимое файла при запросе только от вашей проверяющей процедуры, да что угодно. Не пытайтесь выиграть на чужом поле.

Комментариев нет:

Отправить комментарий