2010-08-04 7 views
10

comment je peux calculer le hachage MD5 pour un fichier qui est ouvert ou utilisé par un processus?C# calculer MD5 pour le fichier ouvert?

les fichiers peuvent être txt ou exe et

mon erreur courant de retour de code pour un exe car il est en cours d'exécution

voici mon code actuel

public static string GetMd5HashFromFile(string fileName) 
{ 
    FileStream file = new FileStream(fileName, FileMode.Open); 
    MD5 md5 = new MD5CryptoServiceProvider(); 
    byte[] retVal = md5.ComputeHash(file); 
    file.Close(); 

    StringBuilder sb = new StringBuilder(); 
    for (int i = 0; i < retVal.Length; i++) 
    { 
     sb.Append(retVal[i].ToString("x2")); 
    } 
    return sb.ToString(); 
} 

Cheers.

Répondre

10

Essayez d'ouvrir le fichier en lecture seule:

FileStream file = new FileStream(fileName, FileMode.Open, FileAccess.Read); 

ou:

FileStream file = File.OpenRead(fileName); 

qui fonctionnera selon le mode de partage des autres descripteurs de fichiers. Si le fichier n'est verrouillé que parce qu'il s'agit d'un EXE en cours d'exécution, je pense que cela suffira.

+0

Merci allot, a parfaitement fonctionné :-) –

6

Si vous mettez à jour votre appel de constructeur FileStream à ceci;

FileStream file = File.Open(fileName, 
          FileMode.Open, 
          FileAccess.Read, 
          FileShare.ReadWrite); 

Cela devrait vous permettre d'ouvrir un fichier qui est utilisé par un autre processus.