2016-03-18 31 views
0

我有一个正在运行的Windows服务。在下载一个zip文件后,应该检查该文件。目前它将通过MD5散列进行检查。但是这对于大约1GB的文件大小并不是很快。改变这种情况的另一个原因是我在Windows 7 64位计算机上遇到了一个outofmemory异常,同时将该文件读入一个字节数组中。最快的方法来检查C#中的文件真实性

感谢您的帮助。

+3

你是如何计算的'MD5'?您不需要将整个文件加载到内存中。请参阅http://stackoverflow.com/questions/10520048/calculate-md5-checksum-for-a-file - 对于1gb,MD5应该没有问题。大部分成本将会受IO限制。 – Rob

+0

谢谢,我不知道为什么我把文件加载到内存中。 – xlShortylx

回答

0

也许MD5看起来simplier,但这样的事情应该也行(这不是内存相关的):

static bool Compare(string filePath1, string filePath2) 
{ 
    using (FileStream file = File.OpenRead(filePath1)) 
    { 
     using (FileStream file2 = File.OpenRead(filePath2)) 
     { 
      if (file.Length != file2.Length) 
      { 
       return false; 
      } 

      int count; 
      const int size = 0x1000000; 

      var buffer = new byte[size]; 
      var buffer2 = new byte[size]; 

      while ((count = file.Read(buffer, 0, buffer.Length)) > 0) 
      { 
       file2.Read(buffer2, 0, buffer2.Length); 

       for (int i = 0; i < count; i++) 
       { 
        if (buffer[i] != buffer2[i]) 
        { 
         return false; 
        } 
       } 
      } 
     } 
    } 

    return true; 
} 
相关问题