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