ASP.NET не может выполнить операцию над файлом, поскольку он используется другим процессом?

1

Я искал этот сайт для решения вопроса о том, почему процесс не может получить доступ к файлу, потому что он используется другим процессом. К сожалению, все они, похоже, имеют очень специфические ответы на свои проблемы (например, вложения электронной почты). Итак, я думал, что отправлю сюда и, возможно, смогу помочь в решении моей проблемы. Конечная цель с этим блоком кода - просто получить хэш файл 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();
    }
Теги:
cryptography
process
sha256

3 ответа

2
Лучший ответ

Удостоверьтесь, что вы удаляете файл после прочтения его - это закрывает пар:

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);
  • 0
    Спасибо за код. Это сработало и заслуживает правильного маркера. Кроме того, хотя, когда я сохраняю файл с hashedfile1name, файл сохраняется как System.Byte [], почему это так?
  • 0
    Ой, подождите, я исправил это с помощью этого: hashedfile1name = Convert.ToBase64String (hash.ComputeHash (bytes));
0

Вы должны закрыть файл(), прежде чем удалять его.

0

Перед удалением файла необходимо закрыть FileStream.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню