J'ai un problème lors de l'exécution d'une méthode qui calcule les sommes de contrôle MD5 et SHA1 pour un fichier donné. Mes méthodes ressemblent à ceci:
SHA1:IOException lors du calcul des sommes de contrôle MD5 et SHA1
public string HashFile(string toHash)
{
SHA1 SHA1ENGINE = SHA1.Create();
byte[] hashBytes = SHA1ENGINE.ComputeHash(File.Open(toHash, FileMode.Open, FileAccess.Read));
StringBuilder sb = new StringBuilder();
for (int i = 0; i < hashBytes.Length; i++)
{
sb.Append(hashBytes[i].ToString("X2"));
}
return sb.ToString();
}
MD5:
public string HashFile(string toHash)
{
MD5 MD5ENGINE = MD5.Create();
byte[] hashBytes = MD5ENGINE.ComputeHash(File.Open(toHash, FileMode.Open, FileAccess.Read));
StringBuilder sb = new StringBuilder();
for (int i = 0; i < hashBytes.Length; i++)
{
sb.Append(hashBytes[i].ToString("X2"));
}
return sb.ToString();
}
Lors de l'exécution d'une de ces méthodes, je reçois un IOException: Le processus ne peut pas accéder au fichier « (PATHTOFILE) 'parce qu'il est utilisé par un autre processus.
Ceci est un problème persistant, je ne peux pas calculer les sommes de contrôle pour un fichier sur mon PC. Je suis connecté en tant qu'administrateur local et VS est ouvert en tant qu'administrateur. Ceci est persistant pour tout répertoire que j'ai essayé par exemple: C: \ TEMP, C: \ Users \ Administrator \ Desktop. J'ai également essayé de redémarrer mon PC, car il pourrait effectivement y avoir un processus qui verrouille les fichiers, mais cela n'a pas aidé.
Au début, j'ai essayé d'utiliser:
byte[] hashBytes = SHA1ENGINE.ComputeHash(File.OpenRead(toHash));
Mais après avoir rencontré le problème décrit et une enquête que j'ai changé que pour:
byte[] hashBytes = SHA1ENGINE.ComputeHash(File.Open(toHash, FileMode.Open, FileAccess.Read));
Cela aussi n'a pas aidé.
'File.Open()' renvoie quelque chose qui doit être éliminé. – CodeCaster
Vous devez utiliser une instruction using sur file.open https://msdn.microsoft.com/en-us/library/b9skfh7s(v=vs.110).aspx – JOSEFtw