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 :

Problème de foreach sur getFiles()


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2010
    Messages : 22
    Par défaut Problème de foreach sur getFiles()
    Bonjour,
    actuellement j'ai ceci qui fonctionne correctement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    foreach (FileInfo nextImage in dirRoot.GetFiles())
    {
         if (BoiteAOutils.isImage(nextImage.Extension))
         {
               addImage(path + @"\" + nextImage.Name, newnode);
         }
    }
    Et lorsque je rajoute ce code a la fonction addImage
    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
     
    if(System.IO.File.Exists(pathImage))
    {
           Bitmap img = new Bitmap(pathImage);
           int ratio;
           if (img.Width < img.Height)
                 ratio = img.Height / 60;
           else if (img.Height < img.Width)
                 ratio = img.Width / 60;
           else
                 ratio = 1;
           Bitmap image = new Bitmap(img, new Size(60, 60));
           image.Save(pathDossDest+@"\"+Path.GetFileName(pathImage));
           img.Dispose();
           image.Dispose();
     }
    Dans mon nextImage, s'ajoute les noms des fichiers en allant c est a dire :
    premier passage : nextFile.name=fichier1.jpg
    second : nextFile.name=fichier1.jpg.fichier2.jpg
    troisisieme : nextFile.name=fichier1.jpg.fichier2.jpg.fichier3.jpg
    .... ainsi de suite.
    Je ne vois vraiment pas en quoi un code appelant peut poser soucis dans le code appelant.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    A mon avis le problème ne se trouve pas dans le code que tu as posté... en tous cas je ne trouve rien qui puisse expliquer ça. Montre un extrait de code plus complet.

  3. #3
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach (FileInfo nextImage in dirRoot.GetFiles())
    A ma connaissance, ça va évaluer GetFiles() à chaque itération, non ?

    Donc vu qu'on ajoute des fichiers à chaque itération, on arrive dans une boucle infinie, et on rempli le disque...

    Moi je fais toujours :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    FileInfo [] files = dirRoot.GetFiles();
    foreach (FileInfo nextImage in files)

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par StringBuilder Voir le message
    A ma connaissance, ça va évaluer GetFiles() à chaque itération, non ?
    Non, le foreach est transformé par le compilateur en quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    using (IEnumerator<FileInfo> enumerator = GetFiles().GetEnumerator())
    {
        while(enumerator.MoveNext())
        {
            FileInfo nextImage = enumerator.Current;
     
            // Corps de la boucle foreach
            ...
        }
    }
    GetFiles n'est donc appelé qu'une seule fois.

  5. #5
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    ah ok, bon, ben je m'amuse tout le temps à passer par un array inutile alors

  6. #6
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2010
    Messages : 22
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    DirectoryInfo dirRoot = new DirectoryInfo(path);
                try
                {
                    foreach (FileInfo nextImage in dirRoot.GetFiles())
                    {
                        if (BoiteAOutils.isImage(nextImage.Extension))
                        {
                            addImage(path + @"\" + nextImage.Name, newnode);
                        }
                    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public void addImage(string path,XmlNode node)
            {
                XmlNode Nimage = docXml.CreateElement("image");
                XmlNode pathNode = docXml.CreateElement("pathImage");
                XmlText text = docXml.CreateTextNode(path);
                XmlNode pathMiniatureNode = docXml.CreateElement("pathMiniature");
                XmlText textmini = docXml.CreateTextNode(pathMiniatures+"\\"+Path.GetFileName(path));
                pathMiniatureNode.AppendChild(textmini);
                pathNode.AppendChild(text);
                Nimage.AppendChild(pathNode);
                Nimage.AppendChild(pathMiniatureNode);
                node.AppendChild(Nimage);
                BoiteAOutils.addMiniature(path, pathMiniatures);
            }
    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
    public static void addMiniature(string pathImage,string pathDossDest)
            {
                if(System.IO.File.Exists(pathImage))
                {
                    Bitmap img = new Bitmap(pathImage);
                    int ratio;
                    if (img.Width < img.Height)
                        ratio = img.Height / 60;
                    else if (img.Height < img.Width)
                        ratio = img.Width / 60;
                    else
                        ratio = 1;
                    Bitmap image = new Bitmap(img, new Size(60, 60));
                    image.Save(pathDossDest+@"\"+Path.GetFileName(pathImage));
                    img.Dispose();
                    image.Dispose();
                }
            }
    Si je met cette ligne en commentaire : BoiteAOutils.addMiniature(path, pathMiniatures); plus de problème.

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

Discussions similaires

  1. [ZF 1.11] problème dojo.date sur onchange dans foreach
    Par yoann92 dans le forum Zend_Form
    Réponses: 2
    Dernier message: 27/09/2012, 11h14
  2. Réponses: 1
    Dernier message: 07/02/2008, 21h40
  3. [CR] Problème de sélection sur un champ date
    Par noluc dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 21/11/2003, 16h56
  4. Problème avec RDTSC sur K6-III
    Par le mage tophinus dans le forum x86 32-bits / 64-bits
    Réponses: 17
    Dernier message: 30/09/2003, 09h43
  5. problème de float sur SQL server 2000.
    Par fidji dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 24/07/2003, 14h15

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