2010-11-29 3 views
2

Я разработал приложение C#, в приложении пользователи выбирают фотографию для каждой записи. Однако пользователь должен также иметь возможность изменять предварительно выбранную фотографию с более новой. Когда пользователь меняет фотографию, приложение сначала удаляет старую фотографию из каталога приложения, а затем копирует новую фотографию, но когда это делает приложение, дает исключение, потому что файл используется приложением, поэтому его нельзя удалить, пока приложение Бег. Кто-нибудь знает, как разобраться в этом? Я ценю вашу помощьКак удалить файл во время работы приложения

Это исключение

Процесс не может получить доступ к файлу «D: \ Мои Проекты \ Hawkar'sProject \ Software \ Application \ Bin \ Debug \ Фотографии \ John Smith.png ', потому что он используется другим процессом.

//defining a string where contains the file source path 
      string fileSource = Open.FileName; 

      //defining a string where it contains the file name 
      string fileName = personNameTextBox.Text + ".png" ; 

      //defining a string which specifies the directory of the destination file 
      string fileDest = dir + @"\Photos\" + fileName; 

      if (File.Exists(fileDest)) 
      { 

       File.Delete(fileDest); 
       //this is a picturebox for showing the images 
       pbxPersonal.Image = Image.FromFile(dir + @"\Photos\" + "No Image.gif"); 
       File.Copy(fileSource, fileDest); 
      } 
      else 
      { 
       File.Copy(fileSource, fileDest); 

      } 
      imageIDTextBox.Text = fileDest; 
+0

«Привет, господа» - возможно, не только мужчины смотрят> ;-) – smirkingman 2010-11-30 13:51:54

ответ

3

Прежде всего, код не является хорошим. Новое изображение копируется только в том случае, если в настоящее время нет изображения (еще). Но если есть старое изображение, вы удаляете это изображение только, но никогда не копируете его более новый (если).

Код должен лучше выглядеть следующим образом:

if (File.Exists(fileDest)) 
{ 
    File.Delete(fileDest); 
} 

File.Copy(fileSource, fileDest); 
imageIDTextBox.Text = fileDest; 

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

0

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