2012-03-09 136 views
1

我想提示用户保存一个文件时,已经做了一些修改,但问题是我不能为我的生活做到这一点。如何检查文件是否已被修改在c#

有人建议使用FileInfo类,但它只给你lastWriteTimeLastAccessTimeCreationTime

我想使用FileInfo类而不是FileSystemWatcher检查修改,但如何?

示例:假设用户在我的程序中编辑了一个文件,它们已加载并单击EXIT,我想要一种方法来检查是否对该文件进行了任何修改。如果没有,退出。如果有的话,提示用户保存该文件。那么,如何检查该文件的修改?

+1

我们没有足够的信息来回答这个问题。你的意思是像VS本身的东西,当你编辑它时,文件在标签名称旁边有一个星号,然后提示用户在关闭VS时保存文件? – 2012-03-09 19:46:57

+2

请澄清你的问题。你的意思是当你自己的程序修改了文件?或者你的意思是当一些外部程序修改它时?如果是第二个,则要么需要使用FileInfo轮询它(一次又一次检查它),要么使用FileSystemWatcher来通知您。 – 2012-03-09 19:48:07

+0

你想在磁盘上改变它时保存它吗?重新加载似乎更有意义。 – 2012-03-09 19:48:24

回答

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 2012-03-09 20:23:40

1

下面是一些例子如何使用File或FileInfo类来获取LastWriteTime。

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

我将存储文件的时间戳当你加载它,然后将其比作File.GetLastWriteTime(),看看是否该文件已被从那时起保存。如果文件是由外部源修改的,则可以让用户选择放弃其更改并重新加载文件,或将其更改保存到新文件。