IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Dotnet Discussion :

The process cannot access the file 'xyz' ..


Sujet :

Dotnet

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de dsolheid
    Inscrit en
    Décembre 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Décembre 2007
    Messages : 141
    Par défaut The process cannot access the file 'xyz' ..
    Bonjour à tous,

    J'ai un DataGridView, avec une colonne contenant des images.
    L'affichage est ok, l'ajout et la supression d'un ROW aussi.

    Mais une fois que je souhaite modifier une image (la remplacer par une autre), j'ai l'erreur suivante :
    The process cannot access the file 'C:\BooBooking\News\news-5.jpg' because it is being used by another process."

    Car j'essaye de supprimer l'image existante, et ensuite en ajouter une ...

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Try
        If My.Computer.FileSystem.FileExists(fullPath) Then
           Table_NewsDataGridView.SelectedRows(0).Cells("DataGridViewTextBoxColumnImage").Value = Nothing                     
           My.Computer.FileSystem.DeleteFile(fullPath)
        End If
        My.Computer.FileSystem.CopyFile(.FileName, fullPath)
    Catch ex As Exception
        MsgBox(ex.Message())
    End Try
    Voici le code de l'affichage : (dans CellFormatting)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Dim mainPath, newsID As String
                mainPath = My.Settings.MainPath()
                Dim newsRow() As Data.DataRow
                newsID = Table_NewsDataGridView.Rows(e.RowIndex).Cells("DataGridViewTextBoxColumnID").Value
                If (Not (newsID = Nothing)) And (newsID > 0) Then
                    newsRow = Me.BoobooBDDataSet.Table_News.Select("ID ='" + newsID.ToString() + "'")
     
     
                    Dim strFilename As String = mainPath + "\" + newsRow(0)("Image")
                    Try
                        If (My.Computer.FileSystem.FileExists(strFilename)) Then
                            'theImage = Image.FromFile(strFilename)
                            e.Value = Bitmap.FromFile(strFilename)
                        End If
                    Catch ex As Exception
                        MsgBox(ex.Message)
                    End Try
     
                End If


    Avez vous une idée pour dé-référencer l'image avant de pouvoir la supprimer et la remplacer ?

    Merci

  2. #2
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    L'objet Bitmap utilise des ressources non managées (GDI si je me trompe pas), il faut donc appeler la méthode Dispose de l'objet Bitmap avant de pouvoir supprimer le fichier associé à l'image.

  3. #3
    Membre confirmé Avatar de dsolheid
    Inscrit en
    Décembre 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Décembre 2007
    Messages : 141
    Par défaut
    Citation Envoyé par StormimOn Voir le message
    L'objet Bitmap utilise des ressources non managées (GDI si je me trompe pas), il faut donc appeler la méthode Dispose de l'objet Bitmap avant de pouvoir supprimer le fichier associé à l'image.
    Merci pour la réponse,

    J'avais effectivement essayé un Dispose au lieu du = Nothing.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim bmp As Bitmap = Table_NewsDataGridView.SelectedRows(0).Cells("DataGridViewTextBoxColumnImage").Value
    bmp.Dispose()
    Mais cela ne va pas car "Value" vaut Nothing.

    pourtant dant CellFormatting, j'attribue bien un Bitmap à ma Cell :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    e.Value = Bitmap.FromFile(strFilename)

  4. #4
    Membre émérite Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Par défaut
    Citation Envoyé par dsolheid Voir le message
    Avez vous une idée pour dé-référencer l'image avant de pouvoir la supprimer et la remplacer ?

    Merci
    Première info: Image.FromFile(strFilename) ou Bitmap.FromFile(strFilename) c'est pareil (Bitmap hérite d'Image et n'override pas FromFile).

    Ce qui est étrange par contre c'est que le handle pour afficher ton image ne soit pas libéré... Pour localiser d'ou vient ton problème essaie de charger l'image toi meme, en lisant le fichier dans un stream grâce à Image.FromStream et en t'assurant de bien fermer le flux du fichier.

  5. #5
    Membre confirmé Avatar de dsolheid
    Inscrit en
    Décembre 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Décembre 2007
    Messages : 141
    Par défaut
    Citation Envoyé par neptune Voir le message
    Première info: Image.FromFile(strFilename) ou Bitmap.FromFile(strFilename) c'est pareil (Bitmap hérite d'Image et n'override pas FromFile).

    Ce qui est étrange par contre c'est que le handle pour afficher ton image ne soit pas libéré... Pour localiser d'ou vient ton problème essaie de charger l'image toi meme, en lisant le fichier dans un stream grâce à Image.FromStream et en t'assurant de bien fermer le flux du fichier.
    Effectivement, appeler FromFile n'est pas le bon plan.
    Je viens de tester en C#/.NET avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    System.IO.FileStream Fs = new System.IO.FileStream("C:\\mouse.jpg", System.IO.FileMode.Open);
    e.Value = Image.FromStream(Fs);
    Fs.Close();
    dans le CellFormatting ...
    Et du coup, le Delete du fichier est accepté.

    Merci pour l'aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 31/03/2014, 13h09
  2. Réponses: 5
    Dernier message: 23/04/2013, 01h41
  3. Réponses: 1
    Dernier message: 18/02/2010, 17h39
  4. The process cannot access the file.
    Par GoTrUnKo dans le forum ASP.NET
    Réponses: 4
    Dernier message: 28/01/2009, 17h06
  5. [Web Services] The system cannot find the path specified spring
    Par ouedmouss dans le forum Spring
    Réponses: 0
    Dernier message: 20/09/2008, 20h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo