Member 10411410 Ответов: 2

Проблема удалением изображения используется элемент управления PictureBox


<pre> Directory.Delete(Application.StartupPath & "\test\ax1.jpg", True)


Что я уже пробовал:

Directory.Delete(Application.StartupPath & "\test\ax1.jpg", True)

2 Ответов

Рейтинг:
2

Jochen Arndt

Встраивайте свой код в обработчик try catch, ловите исключения и сообщайте об ошибках, используя текст сообщения execption:

Try
    Directory.Delete(Application.StartupPath & "\test\ax1.jpg", True)
Catch e As Exception
    MessageBox.Show(e.ToString)
End Try
В вашем случае это может быть ошибка отказа в доступе, когда ваше приложение находится в системной папке, например программный файл (учетные записи пользователей не имеют прав на запись и удаление в таких папках), ошибка "файл не найден" или блокировка файла. Но только сообщение об ошибке скажет вам.


Рейтинг:
0

OriginalGriff

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

Без вашего кода мы не можем сказать, но есть вероятность, что вы загружаете изображение с помощью Изображение.Метод FromFile (String) (System.Рисование)[^] или одна из его перегрузок - и в документации четко указано:

Цитата:
Файл остается заблокированным до тех пор, пока изображение не будет удалено.
Это означает, что пока экземпляр изображения существует в вашем приложении, Источник изображения используется, он не может быть открыт для записи или удален.

Способ обойти это-использовать изображение.FromFile, чтобы загрузить изображение, скопируйте его, а затем утилизируйте оригинал:
Public Function GetImage(ByVal path As String) As Image
    Using im As Image = Image.FromFile(path)
        Return New Bitmap(im)
    End Using
End Function
После этого исходный файл больше не блокируется и может быть перезаписан или удален.

Но это как раз та проблема, которую вы заметили, - на горизонте маячит более крупная. Ваше приложение не будет работать в рабочей среде, потому что вы используете папку EXE - файлов для хранения данных-и в рабочей среде, которая будет находиться в папке "Program Files", которая не доступна для записи без разрешений администратора. Видеть здесь: Где я должен хранить свои данные?[^] - код написан на C#, но его тривиально преобразовать в VB.


Richard Deeming

Эти замечания новы - я уверен, что раньше он держал файл заблокированным до тех пор, пока домен приложения не был выгружен. Может быть, они наконец-то решили проблему?

OriginalGriff

Не из того, что я помню - это было так, по крайней мере, с .NET V2.0, что я могу вспомнить.

Richard Deeming

Это странно. Должно быть, мой мозг стареет. :)