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

MFC Discussion :

[MFC] Probléme FindNextFile


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Oni
    Oni est déconnecté
    Membre averti
    Inscrit en
    Octobre 2002
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 31
    Par défaut [MFC] Probléme FindNextFile
    Bonjour

    En utilisant ce code je me suis aperçu quand copiant les fichiers d'un dossier à un autre, il me toujours 1 fichier.
    Pouvez vous me dire d'où cela peut venir.

    Merci.

    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
    20
    void CCopieFichierApp::Copie()
    {
    	CFileFind fDossier;
    	CString SDepart; SDepart = "c:\\test\\";
    	CString SFinal; SFinal = "d:\\test\\";
    	CString SFichier; SFichier.IsEmpty();
     
    	if(fDossier.FindFile(SDepart+"*.*"))
    	{
    		while(fDossier.FindNextFile())
    		{
    			if((!fileFind.IsDirectory())&&(!fileFind.IsDots()))
    			{
    				SFichier = fileFind.GetFileName();
    				CopyFile(SDepart+SFichier, SFinal+SFichier, FALSE);
    			}
    		}
    	}
    	fileFind.Close();
    }

  2. #2
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    C'est quoi fileFind ?
    Tu loupes le premier fichier trouvé par FindFile() car tu passes de suites au suivant via FindNextFile(). Transforme ton while en do...while.

  3. #3
    Oni
    Oni est déconnecté
    Membre averti
    Inscrit en
    Octobre 2002
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 31
    Par défaut
    Non, si je ne fais un pas un FindNextFile il me fait un plantage windows...

  4. #4
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    C'est qu'il y a une erreur quelque part. Quelle est l'erreur ?

    C'est quoi fileFind ?

  5. #5
    Oni
    Oni est déconnecté
    Membre averti
    Inscrit en
    Octobre 2002
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 31
    Par défaut
    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
    20
    void CCopieFichierApp::Copie() 
    { 
       CFileFind fDossier; 
       CString SDepart; SDepart = "c:\\test\\"; 
       CString SFinal; SFinal = "d:\\test\\"; 
       CString SFichier; SFichier.IsEmpty(); 
     
       if(fDossier.FindFile(SDepart+"*.*")) 
       { 
          while(fDossier.FindNextFile()) 
          { 
             if((!fDossier.IsDirectory())&&(!fDossier.IsDots())) 
             { 
                SFichier = fDossier.GetFileName(); 
                CopyFile(SDepart+SFichier, SFinal+SFichier, FALSE); 
             } 
          } 
       } 
       fDossier.Close(); 
    }
    Désolé j'ai fait une erreur en voulant simplifier mon code !!!!

  6. #6
    Oni
    Oni est déconnecté
    Membre averti
    Inscrit en
    Octobre 2002
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 31
    Par défaut
    Dans la doc il y a ecrit ça : After calling FindFile to begin the file search, call FindNextFile to retrieve subsequent files.

    Ce que je ne comprends pas c'est pourquoi il saute toujours le premier fichier...

  7. #7
    Membre confirmé Avatar de loupdeau
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 125
    Par défaut
    Est-ce que ca peut t'aider ? C'est une partie du code que j'utilise pour parcourir un répertoire et supprimer les fichiers de mon choix :

    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
     
    CString current = ....; //path de ton répertoire
    ::SetCurrentDirectory(current);
     
    CFileFind finder;
    BOOL bWorking = finder.FindFile("*"); 
    while (bWorking)
    {
    	bWorking = finder.FindNextFile();
    	CString directoryToKeep = finder.GetFileName();
     
            ....
     
     
    }

  8. #8
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Par défaut
    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
    20
    21
    22
    void CCopieFichierApp::Copie() 
    { 
       CFileFind fDossier; 
       CString SDepart("c:\\test\\"); 
       CString SFinal("d:\\test\\"); 
       CString SFichier;
       // SFichier.IsEmpty(); ne sert à rien ??!!
     
       if(fDossier.FindFile(SDepart+"*.*")) 
       { 
          do
          { 
             if((!fDossier.IsDirectory())&&(!fDossier.IsDots())) 
             { 
                SFichier = fDossier.GetFileName(); 
                CopyFile(SDepart+SFichier, SFinal+SFichier, FALSE); 
             } 
          }
          while(fDossier.FindNextFile()) 
       } 
       fDossier.Close(); 
    }
    c'est ça que te conseilles Aurelien...

  9. #9
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par Oni
    Dans la doc il y a ecrit ça : After calling FindFile to begin the file search, call FindNextFile to retrieve subsequent files.

    Ce que je ne comprends pas c'est pourquoi il saute toujours le premier fichier...
    subsequent = les suivants. Tu rates le 1°...

  10. #10
    Oni
    Oni est déconnecté
    Membre averti
    Inscrit en
    Octobre 2002
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 31
    Par défaut
    je suis d'accord mais dans la doc il y a aussi écrit ça :

    You must call FindNextFile at least once before calling any of the following attribute member functions:
    GetCreationTime
    GetFileName
    GetFileTitle
    GetFilePath
    GetFileURL
    GetLastAccessTime
    GetLastWriteTime
    GetLength
    GetRoot


    Et si j'utilise le code qu'à mis bigboomshakala il me plante sur la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if((!fDossier.IsDirectory())&&(!fDossier.IsDots()))
    En tous les cas je vous remercie pour votre aide, je vais tout de suite essayer la technique de loupdeau.

  11. #11
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055

  12. #12
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    Bon ben autant pour moi. J'ai présumé que ça fonctionnait pareil qu'en Win32, c'est pas le cas (pas glop quand même).

  13. #13
    Oni
    Oni est déconnecté
    Membre averti
    Inscrit en
    Octobre 2002
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 31
    Par défaut
    j'avais regardé sur le faq avant de poser la question, et j'avais vu ça, mais le probléme est touours le même il me zappe toujours un fichier...

  14. #14
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    c'est pas possible .
    essaye le code de la faq tel quel sur ton chemin pour voir ...


  15. #15
    Oni
    Oni est déconnecté
    Membre averti
    Inscrit en
    Octobre 2002
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 31
    Par défaut
    oui effectivement ça fonctionne, même si je ne comprends pas la différence avec ce que je faisais.

    Merci bcp pour votre aide.

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

Discussions similaires

  1. [MFC] problème avec les insertions dans CComboBox
    Par Joeleclems dans le forum MFC
    Réponses: 12
    Dernier message: 11/06/2004, 15h31
  2. Réponses: 3
    Dernier message: 05/05/2004, 10h23
  3. [MFC] Problème pointeur sur une classe
    Par mick74 dans le forum MFC
    Réponses: 7
    Dernier message: 14/04/2004, 14h17
  4. [MFC] Problème de pointeur !!
    Par acastor dans le forum MFC
    Réponses: 7
    Dernier message: 19/03/2004, 15h50
  5. [MFC] problème d'éxécution
    Par ben_iap dans le forum MFC
    Réponses: 2
    Dernier message: 15/03/2004, 10h31

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