Невозможно удалить файл (JPEG) - PullRequest
0 голосов
/ 24 марта 2010

Я реализовал помощник для отображения миниатюр из здесь . Рядом с миниатюрой есть ссылка для удаления, которая вызывает этот контроллер:

// HTTP POST: /Photo/Delete/1
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Delete(int id, string confirmButton)
{
    var path = "~/Uploads/Photos/";            

    Photo photo = photoRepository.GetPhoto(id);

    if (photo == null)
        return View("NotFound");            

    FileInfo TheFile = new FileInfo(Server.MapPath(path + photo.PhotoID + ".jpg"));    

    if (TheFile.Exists)
    {
        photoRepository.Delete(photo);
        photoRepository.Save();

        TheFile.Delete();
    }
    else return View("NotFound"); 

    return View();
}

Если я отключу отображение миниатюр, файл будет удален. В противном случае отправляется ошибка:

System.IO.IOException: процесс не может получить доступ к файлу 'C: \ Documents и настройки \ или \ Мои документы \ Visual студия 2008 \ Projects \ CMS \ CMS \ Загрузки \ Фотографии \ 26.jpg» потому что он используется другим процесс.

Я также не знаю, правильно ли написана функция удаления моего файла. Поиск в сети, я вижу, что все используют File.Delete(TheFile);, который я не могу использовать, и я использую TheFile.Delete();. При использовании File.Delete(TheFile); я получаю следующую ошибку:

Ошибка 1 'System.Web.Mvc.Controller.File (строка, строка, строка) 'это метод, который не действует в данном контекст C: \ Documents and Настройки \ или \ Мои документы \ Визуальные студия 2008 \ Projects \ CMS \ CMS \ Controllers \ PhotoController.cs 109 17 CMS

Я что-то здесь упускаю?

1 Ответ

1 голос
/ 24 марта 2010

Это потому, что, как говорится, другой процесс получил дескриптор вашего файла, поэтому вы не можете удалить его. В этом случае генератор миниатюр захватил дескриптор вашего файла, предотвращая его удаление. Вы должны закрыть все дескрипторы файла в вашей программе, чтобы удалить его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...