Редактировать: Я переименовал это в пример, так как код работает, как ожидалось.
Я пытаюсь скопировать файл, получить хэш 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)
.