Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошибка удаления файла при его просмотре 
:(
    Опции темы
NilovSerge
Дата 20.7.2008, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 6.10.2007

Репутация: нет
Всего: нет



Всем привет!
У меня есть листбокс со списком файлов и обьект pictureBox для просмотра выбранного файла. Выбранный файл можно в том числе и удалить с диска.
Проблема в том, что что при попытке удалить файл с диска я получаю ошибку:
Код

        string FileToDelete = this.SelectedImage._Value;          // Сохранить имя удаляемого файла
        lbImagesOfDir.Items.RemoveAt(lbImagesOfDir.SelectedIndex); // Из списка удалить имя файла
        pictureBox.Image = null;                                   // в pictureBox убрать изображения
        lbImagesOfDir.SelectedIndex = 0;                           // Перевести фокус на 1й элемент в списке
        lbImagesOfDir.Focus();
        FileInfo fInfo = new FileInfo(FileToDelete);               // Если файл существует на диске его удалить
        if (fInfo.Exists)
        {
          fInfo.Delete(); // The process cannot access the file 'D:\\CSharpProjects\\DirsView\\DirsView\\Images\\HelpLibs\\Common\\simpl.JPG' because it is being used by another process
        }



  Непонятно что держит этот файл?
Картинка при выборе элемента в списке выводится на экран отдельной функцией, 
в которой  создается битмап и цепляется к pictureBox и возвращает строковое описание картинки:


 
Код

   public static string ShowFileNameImageinPicureBox(PictureBox pictureBox, string FullFileName)
    {
      FileInfo fInfo = new FileInfo(FullFileName);
      if (!fInfo.Exists) return "";

      string Res =  FullFileName;
      Image Img;
      string FileName = fInfo.Name;
      try
      {
        Img = new Bitmap(FullFileName);
      }
      catch
      {
        return "";
      }

      pictureBox.Image = Img;
      long FileLength = fInfo.Length;
      Res+= Utils.GetText("File length") + " : " + NLib.FileSystemUtils.GetFileSizeNamed(FileLength, true);
      Res+= " "+Utils.GetText("Width") + " : " + Img.PhysicalDimension.Width.ToString() + ",  " + Utils.GetText("Height") +
          " : " + Img.PhysicalDimension.Height.ToString() + ".  ";

      return Res;
    }

Ресурсы Bitmap и FileInfo на выходе из ShowFileNameImageinPicureBox освобождаются сами? Их вроде явно освобождать не надо ?
В чем может быть проблема?


   Заранее спасибо


Это сообщение отредактировал(а) NilovSerge - 20.7.2008, 22:06
PM MAIL   Вверх
mihryak
Дата 20.7.2008, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 731
Регистрация: 28.4.2007
Где: С-Пб

Репутация: 10
Всего: 36



отсюда
Цитата

The file remains locked until the Bitmap is disposed. 


Код

pictureBox.Image = null; 

здесь вызывай Dispose image'у
PM MAIL ICQ   Вверх
NilovSerge
Дата 21.7.2008, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 6.10.2007

Репутация: нет
Всего: нет



Не получается ...
если писать 
Код

        pictureBox.Image = null;
        pictureBox.Image.Dispose();


то получаю "Object reference not set to an instance of an object."  на Image.Dispose(); так как pictureBox.Image равен null
Если без присваивания null - То тоже ошибка...
PM MAIL   Вверх
Idsa
Дата 21.7.2008, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 6
Всего: 62



Цитата(NilovSerge @  21.7.2008,  22:59 Найти цитируемый пост)
Если без присваивания null - То тоже ошибка... 

Какая?


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
mihryak
Дата 21.7.2008, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 731
Регистрация: 28.4.2007
Где: С-Пб

Репутация: 10
Всего: 36



Цитата(NilovSerge @  21.7.2008,  19:59 Найти цитируемый пост)
Не получается ...
если писать  
        pictureBox.Image = null;
        pictureBox.Image.Dispose();
то получаю "Object reference not set to an instance of an object."  на Image.Dispose(); так как pictureBox.Image равен null
Если без присваивания null - То тоже ошибка... 

а строчки местами менять не пробовал? ;) ты ж null диспозить пытаешься
а если только диспозить без сброса - то при следующей отрисовке будет исключение
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0444 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.