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

C# Discussion :

Fichier en cours d'utilisation par un autre processus


Sujet :

C#

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2016
    Messages : 11
    Points : 10
    Points
    10
    Par défaut Fichier en cours d'utilisation par un autre processus
    Bonjour dans le cadre du développement de mon application je me heurte à un probléme que je ne comprend vraiment pas !

    J'ai un formulaire qui enregistre les données dans un fichier SQLite et j'utilise une picturebox pour afficher l'image sur le form et je copie l'image dans un dossier de l'application.

    Le soucis c'est qu'il me dit lors de la copy quand je veux enregistrer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    //Savegarde Logo si existe
                string filepath = Application.StartupPath + "\\Dossiers\\" + SqlBDD.Filename + "logo.jpg";
     
                if (pictureBox1.Image!=null )
                {
                    File.Copy(openFileDialog1.FileName,filepath,true);   
                }
    System.IO.IOException*: 'Le processus ne peut pas accéder au fichier 'C:\Users\parei\Desktop\AE PrestaGestion\bin\Debug\Dossiers\PSIlogo.jpg', car il est en cours d'utilisation par un autre processus.'


    Je ne comprend pas pourquoi mais en cherchant un peu , c'est ces lignes de codes qui sont en cause, si elles sont commentées alors pas de soucis mais l'affichage dans la picturebox ne se fait pas !

    Ce code s'exécute dans l'évènement load du formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     //Image si existe
                if (File.Exists(Application.StartupPath + "/Dossiers/" + SqlBDD.Filename + "logo.jpg"))
                {
                    pictureBox1.Image = Image.FromFile(Application.StartupPath + "/Dossiers/" + SqlBDD.Filename + "logo.jpg");
     
                }
    Avez vous une idée du probléme ? J'ai éssayer de faire un dispose sur le picturebox mais sans résultat, toujours la même erreur !

  2. #2
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut
    bonjour
    c'est le Image.FromFile qui interdit l'accès (il pose un verrou sur le fichier image).
    il faut créer un nouveau bitmap à partir d'Image.FromFile,le déclarer en portée du Form:
    code .cs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Image  img =new Bitmap(Image.FromFile(path),Image.FromFile(path),.Width,Image.FromFile(path).Height);
    pictureBox1.Image = img;
    bon code....

  3. #3
    Membre chevronné
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 899
    Points : 1 916
    Points
    1 916
    Par défaut
    Je tenterais bien quelque-chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    using(var image = Image.FromFile(path))
    {
        picturebox1.Image = (Image)image.Clone();
    }
    Incidemment, FromFile devrait inciter à penser "ressource fichier verrouillée", ce qui semble confirmé par le fait que System.Drawing.Image implémente IDisposable.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2016
    Messages : 11
    Points : 10
    Points
    10
    Par défaut
    Bonjour rien n'y fait , j'ai essayé ceci en m'inspirant de vos réponse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     private void button1_Click(object sender, EventArgs e)
            {
                openFileDialog1.Filter = "Jpg|*.jpg";
     
                if(openFileDialog1.ShowDialog()!=DialogResult.Cancel)
                {
                    // pictureBox1.Image =Image.FromFile(openFileDialog1.FileName);
                    string path = openFileDialog1.FileName;
                    img = new Bitmap(Image.FromFile(path), Image.FromFile(path).Width, Image.FromFile(path).Height);
                    pictureBox1.Image = img;
                }
            }
    Puis dans le load du form :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     //Savegarde Logo si existe
                string filepath = Application.StartupPath + "\\Dossiers\\" + SqlBDD.Filename + "logo.jpg";
     
                if (img!=null )
                {
     
                    //File.Copy(img,filepath,true);
                    pictureBox1.Image.Save(filepath);
                }
    Mais j'ai une nouvelle erreur :
    Nom : Capture.PNG
Affichages : 708
Taille : 47,5 Ko

  5. #5
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut
    bonjour
    l'erreur est probablement dans la specification du chemin de fichier (double slash manquant).
    con code actuel:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    //Savegarde Logo si existe
                string filepath = Application.StartupPath + "\\Dossiers\\" + SqlBDD.Filename + "logo.jpg";
            if (img!=null )
                {
     
                    //File.Copy(img,filepath,true);
                    pictureBox1.Image.Save(filepath);
                }
    code revu:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        string filepath = Application.StartupPath + "\\Dossiers\\" + SqlBDD.Filename + "\\logo.jpg";
     
      // il existe  aussi Bitmap.Save()
       if (img!=null )
                {
     
                    //File.Copy(img,filepath,true);
                    img.Save(filepath);
                }
    bon code...

  6. #6
    Membre chevronné
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 899
    Points : 1 916
    Points
    1 916
    Par défaut
    Je rejoins MABROUKI sur le diagnostic préliminaire et j'ajouterais qu'on peut utiliser Path.Combine pour constituer un chemin de fichier ou de dossier à partir de plusieurs segments afin justement d'éviter les problèmes de séparateur.

Discussions similaires

  1. [XL-2007] Fichier en cours d'utilisation par "un autre utilisateur"
    Par Kimy_Ire dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 10/04/2015, 21h20
  2. Réponses: 0
    Dernier message: 02/07/2010, 20h14
  3. fichier en cours d'utilisation par autre processus
    Par ritavsky dans le forum VB.NET
    Réponses: 4
    Dernier message: 05/05/2010, 11h10
  4. Lire fichier utiliser par un autre processus
    Par wmenant dans le forum VB.NET
    Réponses: 7
    Dernier message: 18/08/2009, 16h12
  5. Comment lire un fichier DB en cours d'utilisation par 1 autr
    Par jbat dans le forum Bases de données
    Réponses: 4
    Dernier message: 12/03/2004, 11h06

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