none
Problème de Suppression de fichier par code RRS feed

  • Question

  •  

    Bonjour

    J’utilise un PictureBox Pour afficher des photos a partir d’un Dossier  Appelé  Dossier_Image , si je veux supprimer une l’image qui est affichée sur le PicrureBox

      File.Delete(My.Resources.CheminRepertoirReseau & "\ Dossier_Image \" & "Nom.jpg")

      Une exception se génère

    Le processus ne peut pas accéder au fichier 'D:\Reseau\ Dossier_Image \ Nom.jpg', car il est en cours d'utilisation par un autre processus.

    C’est normal puisque le fichier est utilisé par l’application

    Ma question c’est comment le libérer pour pouvoir le supprimer âpres visualisation sur mon PictureBox

    Merci de vouloir aider

     

    samedi 24 novembre 2007 22:30

Réponses

  • Voici une façon simple de faire le travail: mettre deux boutons (Effacer et ouvrir), un PictureBox et un OpenFileDialog:

     

    Extrait de code

    Public Class Form1

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

    ofdImage.InitialDirectory = Environment.SpecialFolder.MyPictures

    ' Charge l'image via un OpenFileDialog

    If ofdImage.ShowDialog(Me) = Windows.Forms.DialogResult.OK Then

    ' Crée l'image original

    Dim OriginalImage As New Bitmap(ofdImage.FileName)

    ' Crée une copie

    Dim Img As New Bitmap(OriginalImage)

    ' Dipose de la première

    OriginalImage.Dispose()

    ' Assigne la seconde image

    PictureBox1.Image = Img

    End If

    End Sub

     

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    If ofdImage.FileName <> String.Empty Then

    ' Efface l'image selon le nom du OpenFileDialog

    File.Delete(ofdImage.FileName)

    PictureBox1.Image = Nothing

    End If

    End Sub

    End Class

     

     

    Une autre façon serait de mettre tes images directement en BD, j'ai déjà eu à programmer un application qui fesait des deux façons selon le choix de l'utilisateur.

     

    mardi 27 novembre 2007 01:54
    Modérateur

Toutes les réponses

  • Es-ce que tu charges l'image avant ou tu l'utilises avec le nom de répertoire directement dans le pictureBox, car le second va te générer une erreur.

     

    lundi 26 novembre 2007 02:25
    Modérateur
  • Bonjour

     

    J’utilise un répertoire Image Dans lequel je stock les image que j’utilise

    J’ai une base de données avec une table photos qui comporte les champs

    (Ref Photo-Nom Photo-description)

    J’utilise (ref Photo) comme Nom Unique a l’image que j’enregistre dans ce répertoire

     Si j’ai bien compris ta question

    J’utilise directement à partir d’un répertoire, et je crois que sa serai très intéressant si tu me montrais comment la charger (ou charger toute les images avant de les utiliser)  j’imagine que sa va même optimise  la vitesse du parcoure des images  par le PictureBox surtout si je veux l’utiliser en réseau

    Merci de faire suite

       

    lundi 26 novembre 2007 22:26
  • Voici une façon simple de faire le travail: mettre deux boutons (Effacer et ouvrir), un PictureBox et un OpenFileDialog:

     

    Extrait de code

    Public Class Form1

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

    ofdImage.InitialDirectory = Environment.SpecialFolder.MyPictures

    ' Charge l'image via un OpenFileDialog

    If ofdImage.ShowDialog(Me) = Windows.Forms.DialogResult.OK Then

    ' Crée l'image original

    Dim OriginalImage As New Bitmap(ofdImage.FileName)

    ' Crée une copie

    Dim Img As New Bitmap(OriginalImage)

    ' Dipose de la première

    OriginalImage.Dispose()

    ' Assigne la seconde image

    PictureBox1.Image = Img

    End If

    End Sub

     

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    If ofdImage.FileName <> String.Empty Then

    ' Efface l'image selon le nom du OpenFileDialog

    File.Delete(ofdImage.FileName)

    PictureBox1.Image = Nothing

    End If

    End Sub

    End Class

     

     

    Une autre façon serait de mettre tes images directement en BD, j'ai déjà eu à programmer un application qui fesait des deux façons selon le choix de l'utilisateur.

     

    mardi 27 novembre 2007 01:54
    Modérateur
  •  

    Bonjour

    Ça marche à merveille

    Mon problème est résolu

    Une autre question sur l’utilisation de cette idée,

    Si je veux utiliser mon application sur réseau, comment éviter l’appelé  du répertoire dont se trouve les images (répertoire sur réseau) à chaque fois que l’utilisateur click sur bouton suivant pour changer l’image par exemple

    Copier toutes les images du répertoire  réseau sur un répertoire local à l’application seulement l’ouverture de l’application et à la mise a jour  et l’utiliser comme ressource serai-t-il une bonne Idée pour optimiser les ressources réseau (rapidité, travail hors connexion) ? Ou l’utilisation des images dans DB avec DataSet serai-il meilleur ?

     

    Merci pour tout

    mercredi 28 novembre 2007 22:17
  • Moi je suis plutôt de l'idée du chargement à la demande, donc pour moi c'est un peu superflu de faire une copie locale des fichiers sur le réseau. Cela va prendre beaucoup trop de temps pour rien au démarrage surtout s'il ne veut pas voir toutes les photos.

     

    J'obterais pour l'utilisation d'un background worker pour le chargement asynchrone des fichiers, donc chargement des images suivantes avant même que l'utilisateur ne les demandes,mais demande un peu plus de travail, mais le résultat pourrait être optimale.

     

    Pour ce qui est des images en BD, ce serait une bonne idée d'essayer pour voir les performances. Moi j'utilisais SQL Compact Edition comme BD avec le fichier de BD en locale, et cela étais très rapide, mais la BD peut devenir assez lourde, donc à faire attention. De plus, cela ne changera pas le traffic sur ton réseau, puisque tu dois quand même allez les chercher.

     

    L'idéal serait que tu essaies une ou deux solutions pour tester les performances et prendre celle qui de convient le mieux.

     

    jeudi 29 novembre 2007 03:08
    Modérateur