2012-03-09 5 views
1

Я хочу предложить пользователю сохранить файл, когда какая-либо модификация была сделана для него, но проблема в том, что я не могу на всю жизнь этого сделать.Как проверить, был ли файл изменен в C#

Некоторые люди предложили использовать FileInfo класс, но это только дает lastWriteTime, LastAccessTime и CreationTime.

Я хотел бы использовать класс FileInfo, а не FileSystemWatcher, чтобы проверить изменения, но как?

Пример: скажите, что пользователь отредактировал файл в моей программе, который они загрузили, и нажимает кнопку EXIT, я хочу, чтобы проверить, были ли сделаны какие-либо изменения в файле. Если нет, выйдите. Если некоторые, попросите пользователя сохранить файл. Итак, как я могу проверить изменения этого FILE?

+1

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

+2

Просьба уточнить ваш вопрос. Вы имеете в виду, когда ваша собственная программа изменила файл? Или вы имеете в виду, когда какая-то внешняя программа изменила его? Если это второй, вам нужно будет опросить его с помощью FileInfo (проверьте его снова и снова) или используйте FileSystemWatcher, чтобы уведомить вас. –

+0

Вы хотите _Save_, когда что-то еще изменило его на диске? Перегрузка кажется более разумной. –

ответ

5

Самый простой способ вычислить MD5 хэш файла и сравнить с оригинальным MD5 хэш, и если эти два не совпадают файл был изменен ...

 using (var md5 = new MD5CryptoServiceProvider()) 
     { 
      var buffer = md5.ComputeHash(File.ReadAllBytes(filename)); 
      var sb = new StringBuilder(); 
      for (var i = 0; i < buffer.Length; i++) 
      { 
       sb.Append(buffer[i].ToString("x2")); 
      } 
      return sb.ToString(); 
     } 
+2

Это может быть немного ресурсоемким, в зависимости от размера файла ... – mgnoonan

1

Вот некоторые примеры как использовать класс File или FileInfo для получения LastWriteTime.

http://www.csharp-examples.net/file-creation-modification-time/

Я бы хранить метку времени файла при загрузке его, а затем сравнить его с File.GetLastWriteTime(), чтобы увидеть, если файл был сохранен с тех пор. Если файл был изменен внешним источником, вы можете дать пользователю возможность отменить их изменения и перезагрузить файл или сохранить их изменения в новом файле.

Смежные вопросы