Использование измененной даты файла для сравнения.Это безопасно? - PullRequest
1 голос
/ 15 июня 2010

Я хочу сделать процедуру, которая выполняет одностороннюю синхронизацию папки между сервером и клиентом.Я думал использовать ModifiedDate в качестве критерия, при условии, что будет использоваться только дата файлов сервера.Процедура не будет использовать измененные даты файлов на клиенте вообще.Он будет считывать даты с сервера и сравнивать их с датами, считанными с сервера во время последнего запуска процедуры.Как вы думаете, это безопасно?Есть ли вероятность того, что Дата изменения не будет изменена при редактировании файла или будет изменена, не затрагивая содержимое файла (например, из некоторых странных антивирусных программ)?

Ответы [ 2 ]

1 голос
/ 15 июня 2010

Не рассчитывайте на дату изменения файла.

Странные программы (антивирусы и тому подобное) - не проблема, более того, что вы просто не можете рассчитывать на синхронизацию времени клиента и сервера.

Почему бы не сделать простой расчет различий или хэшей? Вы не можете получить лучшее сравнение, чем это.

Принимая во внимание соображения производительности, вы можете использовать следующую эвристику:

  1. Если дата не изменилась, файл, очевидно, тот же
  2. Если дата изменилась, содержимое файла может измениться, а может и не измениться (например: touch ed). В этом случае, чтобы получить окончательный ответ, вы должны изучить файл как-то .

Итог: дата изменения всегда может дать вам истинный отрицательный результат (файл не изменился), но иногда может дать ложный положительный результат - и в этом случае вы должны проверить.

0 голосов
/ 15 июня 2010

Вы не упомянули, в какой ОС вы работаете, но на платформах UNIX время модификации может быть установлено клиентским кодом на любое желаемое значение (см. Команду utimes() API или touch).Поэтому вы не должны полагаться на время модификации, чтобы сказать вам, был ли файл изменен или нет.Я предполагаю, что Windows чем-то похожа.

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