Манипулирование недавно загруженным файлом вызывает IOException - PullRequest
0 голосов
/ 19 ноября 2010

Моё приложение Asp.net MVC требует загрузки файла. В процессе загрузки я хотел бы манипулировать недавно загруженным файлом.

public ActionResult Edit(int id, FormCollection collection) {
    Block block = userrep.GetBlock(id);
    foreach (string tag in Request.Files) {
        var file = Request.Files[tag] as HttpPostedFileBase;

        if (file.ContentLength == 0)
            continue;

        string tempfile = Path.GetTempFileName()
        file.SaveAs(tempfile);
        // This doesn't seem to make any difference!!
        // file.InputStream.Close();

        if (FileIsSmallEnough(file)) {
            // Will throw an exception!!
            File.Move(tempfile, permanentfile);
        } else {
            GenerateResizedFile(tempfile, permanentfile);
            // Will throw an exception!!
            File.Delete(tempfile);
        }

        block.Image = permanentfile;
    }
    userrep.Save();

Проблема с этим фрагментом состоит в том, что любая попытка манипулировать первоначально загруженным файлом генерирует IOException («Процесс не может получить доступ к файлу, потому что он используется другим процессом.») Конечно, я могу обойти проблему, скорее копируя чем перемещать загруженный файл, но я все равно не могу удалить его, если у меня есть лучшая альтернатива.

Любой совет? Duffy

1 Ответ

2 голосов
/ 19 ноября 2010

Как вы упомянули в ваших комментариях, вы загружаете Image из файла. Документация MSDN гласит, что файл остается заблокированным, пока изображение не будет удалено.

http://msdn.microsoft.com/en-us/library/stf701f5.aspx

Чтобы утилизировать ваше изображение, вы можете либо вызвать метод Dispose в экземпляре, либо использовать предпочтительный механизм оператора using:

private bool FileIsSmallEnough()
{
    using (Image i = Image.FromFile())
    {

    }
}

Это должно решить проблему.

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