Я искал этот сайт для решения вопроса о том, почему процесс не может получить доступ к файлу, потому что он используется другим процессом. К сожалению, все они, похоже, имеют очень специфические ответы на свои проблемы (например, вложения электронной почты). Итак, я думал, что отправлю сюда и, возможно, смогу помочь в решении моей проблемы. Конечная цель с этим блоком кода - просто получить хэш файл sha256 и сохранить файл как таковой на диске.
string hashedfile1name="";
string hashedfile2name="";
FileStream fs = null;
HashAlgorithm hash = new SHA256Managed();
if (FileUpload1.HasFile)
try
{
FileUpload1.SaveAs("C:\\Uploads\\" + FileUpload1.FileName);
fs = File.OpenRead("C:\\Uploads\\" + FileUpload1.FileName);
byte[] bytes = new byte[fs.Length];
fs.Read(bytes, 0, Convert.ToInt32(fs.Length));
hashedfile1name = hash.ComputeHash(bytes).ToString();
File.Delete("C:\\Uploads\\" + FileUpload1.FileName);
Label1.Text = "File name: " + FileUpload1.PostedFile.FileName + " - " + hashedfile1name;
} catch (Exception ex) {
Label1.Text = "ERROR: " + ex.Message.ToString();
}
Удостоверьтесь, что вы удаляете файл после прочтения его - это закрывает пар:
using (fs = File.OpenRead("C:\\Uploads\\" + FileUpload1.FileName))
{
byte[] bytes = new byte[fs.Length];
fs.Read(bytes, 0, Convert.ToInt32(fs.Length));
hashedfile1name = hash.ComputeHash(bytes).ToString();
}
// Now you can delete it
File.Delete("C:\\Uploads\\" + FileUpload1.FileName);
Вы должны закрыть файл(), прежде чем удалять его.
Перед удалением файла необходимо закрыть FileStream.