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 :

[VC++ 2003] Lister tous les bmp d'1 dossier


Sujet :

MFC

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 135
    Par défaut [VC++ 2003] Lister tous les bmp d'1 dossier
    Bonjour,

    J'ai conçu un petit logiciel de traitement d'image. J'aimerai que cette appli puisse traiter toutes les images bmp qui sont présentes dans un dossier qui est choisi par l'utilisateur (-> voir CMyFileDialog qui hérite de CFileDialog ).

    Ce que j'aimerai faire : obtenir une variable qui puisse enregistrer les noms de toutes les images bmp contenu dans le chemin récuperer par la classe CMyFileDialog (une variable de type CString).

    Quelqu'un pourrait me donner un indice sur se qui serait le plus simple et robuste pour résoudre mon problème (j'ai vue quelque chose de similaire dans les tutos mais seulement pour builderC++).

    merci bcp.

    Raphael

  2. #2
    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
    salut,
    c'est quoi le probléme ?
    parcourir les bmp à partir d'un chemin ?
    si c'est le cas voir la faq et CFileFind.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 135
    Par défaut
    Bonjour farscape,

    Dsl pour le mauvais placement de mon post.

    Par rapport a CFileFind, j'ai compris qu'il fallait utiliser les fonction membre FindFile et FileNextFile, mais je ne trouve pas d'exemple sur le forum.

    Pourrais-tu me procurer un liens qui me donne une idée de comment utiliser cette classe.

    Merci bcp.



    Raphael

  4. #4
    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 compliqué ...
    dans le moteur de recherche de la faq tu tapes CFileFind...
    ça va pour cette fois la prochaine je sévis
    http://c.developpez.com/faq/vc/?page=Fichiers#FindFile


  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 135
    Par défaut
    Oupps, non pas la tête!!! Aïe, ok compris...

    Quel est le membre de la CFileFind qui permet de tester si on a un INVALID_HANDLE_VALUE ? j'ai chercher promis, mais j'ai pas trouvé.

    Est-ce que je dois écrire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if( f.FindFile!= INVALID_HANDLE_VALUE )
     
       do...
    merci

  6. #6
    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
    tu n'en as pas besoin !
    tu es en train de me melanger les deux méthodes, la classe et l'accés win32..

    tu devrais relire correctement le post de la faq....

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 135
    Par défaut
    ok, c bon, j'ai compris.

    voici mon code pour ceux que ça intéresse:

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    //Variables pour la récupération des données
    	CString nom;
    	char* szRepertoire;
    	char* szExtension;
    	const char* listeBmp = "C:\\Program Files\\Comptage de particule\\parametres_test.txt";
    	i=0;
     
    	//On récupere les données présent dans les variables
     
    	szExtension = "*.bmp";
    	szRepertoire = buf;
     
     
    	//On concatène le caractère '\'
    	strcat(szRepertoire, "\\");
    	//Puis l'extension
    	strcat(szRepertoire, szExtension);
    //////////////////////////////////////////////////////////////
     
    	CFileFind f;
    	BOOL bMoreFiles = f.FindFile(szRepertoire);
     
    	if(bMoreFiles)
    	{
    		std::ofstream mon_fichier( listeBmp );
     
    		while (bMoreFiles)
    		{
    			bMoreFiles = f.FindNextFile();
     
    			nom = f.GetFileName();
    			mon_fichier << nom  << endl;
    			i++;
     
    		}
    		f.Close();
    	}
    maintenant je n'ai plus qu'à remplacer le fichier text par un tableau pour avoir tout de suite les nom de mes bmp sous la main.

    merci bcp pour ton aide A+.

    Raphael

  8. #8
    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
    une remarque :
    pourquoi se compliquer la vie avec des char * , alors que tu peux tout faire avec une CString ?
    ce qui à l'avantage d'enlever le risque de débordement mémoire ....


  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 135
    Par défaut
    Justement, j'ai un soucis avec la mémoire virtuelle qui devient insuffisente s'il y a trop d'image dans mon dossier, donc d'après toi avec les char* il y a possibilité de saturer la mémoire. Mais il n'y a pas un moyen pour les désaloué au fur et à mesure des traitement comme pour les CString?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    nom.ReleaseBuffer(-1)
    merci pour tes conseilles

  10. #10
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Le risque de saturer la mémoire, c'est surtout pour les allocations: Un char* n'a pas de destructeur, donc il est fréquent qu'on oublie de les désallouer.

    Sans compter que les dépassements de buffer sont fréquents...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 135
    Par défaut
    donc pour éviter de saturer la mémoire, il suffie simplement que je n'oublie pas de désallouer tout mes char* qui trainent dans mon code a l'aide de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    delete [] nomVariable;
    ou alors je les remplace pas des CString et je fais un releasebuffer quand j'en n'ai plus besoin?

  12. #12
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Oui, les deux méthodes sont bonnes pour éviter les fuites de mémoire.

    Attention toutefois pour la désallocation:
    • new[] se libère avec delete[]
    • new se libère avec delete (pour des chaînes, c'est rare)
    • strdup() et malloc()/etc. se libèrent avec free()
    • FormatMessage() et StrDup() se libèrent avec LocalFree()
    • etc.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 135
    Par défaut
    Encore merci pour vos lumière,

    Une petite dernière au passage, connaissez vous un bon debbuger pour trouver toutes les fuites mémoires de mon code?

    voila c tout.

    Encore merci

  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
    tu sais que visual fournit l'information ?

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 01/02/2010, 14h51
  2. Réponses: 4
    Dernier message: 29/08/2006, 18h02
  3. Réponses: 1
    Dernier message: 19/08/2006, 10h27
  4. MFC CDialog - lister tous les composants presents
    Par firejocker dans le forum MFC
    Réponses: 11
    Dernier message: 03/04/2006, 16h10
  5. Comment lister tous les composants d'une fiche ?
    Par tipiweb dans le forum Langage
    Réponses: 2
    Dernier message: 18/01/2006, 21h53

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