編集:コードが期待どおりに機能するため、これを例に変更しました。
ファイルをコピーし、MD5ハッシュを取得してから、コピーを削除しようとしています。これは、別のアプリが書き込む元のファイルのプロセスロックを回避するために行っています。ただし、コピーしたファイルがロックされています。
File.Copy(pathSrc, pathDest, true);
String md5Result;
StringBuilder sb = new StringBuilder();
MD5 md5Hasher = MD5.Create();
using (FileStream fs = File.OpenRead(pathDest))
{
foreach(Byte b in md5Hasher.ComputeHash(fs))
sb.Append(b.ToString("x2").ToLower());
}
md5Result = sb.ToString();
File.Delete(pathDest);
次に、「プロセスがファイルにアクセスできません」という例外が発生しますFile.Delete()
。
このusing
ステートメントを使用すると、ファイルストリームが適切に閉じられると思います。また、ファイルストリームを個別に宣言し、削除し、using
読み取り後に配置してみました。fs.Close()
fs.Dispose()
この後、実際にmd5の計算をコメントアウトすると、ファイルが削除されてコードが実行されるため、と関係があるように見えますComputeHash(fs)
。