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 :

Ouvrir plusieurs fichiers avec OpenFileName


Sujet :

C

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 206
    Points : 83
    Points
    83
    Par défaut Ouvrir plusieurs fichiers avec OpenFileName
    Bonjour,

    j'utilise actuellement la fonction OpenFileName pour ouvrir un fichier en le sélectionnant dans une fenêtre Windows et je voudrais maintenant donner la possibilité à l'utilisateur de sélectionner plusieurs fichier en appuyant sur la touche CTRL.

    Est-ce dans la structure qu'il faut déclarer la sélection multiple ou une autre fonction à utiliser ?
    Si quelqu'un peut m'aiguiller cela serait sympa, merci d'avance

    ps : je joins un bout de mon code actuel pour l'ouverture d'un fichier

    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
     
     
    ZeroMemory(&ofn, sizeof(OPENFILENAME));
    ofn.lStructSize = sizeof(OPENFILENAME);
    ofn.hwndOwner = MainHandle;
    ofn.lpstrFile = szFile;
    ofn.nMaxFile = MAX_PATH;
    ofn.lpstrFilter = "Fichier MTX (*.MTX)\0*.MTX\0";
    ofn.nFilterIndex = 1;
    ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
     
     
    if (GetOpenFileName(&ofn)==TRUE)
     
     {

  2. #2
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut



    Tu peux effectivement rensigner le membre flags de la structure avec la constante OFN_ALLOWMULTISELECT, voir sur cette page


    Enjoy
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 206
    Points : 83
    Points
    83
    Par défaut
    Formidable, un grand merci.
    C'était juste sous mon nez et je ne l'ai pas vu ...

  4. #4
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 206
    Points : 83
    Points
    83
    Par défaut
    Pour poursuivre j'ai encore une question :

    En faisant une sélection multiple avec le membre flags contenant OFN_ALLOWMULTISELECT, je récupère les noms des fichiers sélectionnés dans szFile.

    Existe t'il un moyen de boucler sur szFile tant que l'on n'a pas atteint le dernier nom de fichier ou bien dois-je moi même décomposer szFile pour récupérer les noms de fichiers ?

  5. #5
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Tout est dans la doc : OPENFILENAME Structure

    Citation Envoyé par MSDN
    If the OFN_ALLOWMULTISELECT flag is set and the user selects multiple files, the buffer contains the current directory followed by the file names of the selected files. For Explorer-style dialog boxes, the directory and file name strings are NULL separated, with an extra NULL character after the last file name. For old-style dialog boxes, the strings are space separated and the function uses short file names for file names with spaces. You can use the FindFirstFile function to convert between long and short file names. If the user selects only one file, the lpstrFile string does not have a separator between the path and file name.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  6. #6
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 206
    Points : 83
    Points
    83
    Par défaut
    Merci Raymond, j'ai essayé de coder cela mais cela ne marche pas, pas d'erreur à la compilation mais je ne rentre pas dans ma boucle de traitement (que j'ai fait simple pour le test).

    Si vous voyez où se trouve mon erreur dans mon code, je suis preneur.

    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
     
     
    string nom_chemin;
    HANDLE hSearch;
    WIN32_FIND_DATA File;
     
    ZeroMemory(&ofn, sizeof(OPENFILENAME));
    ofn.lStructSize = sizeof(OPENFILENAME);
    ofn.hwndOwner = MainHandle;
    ofn.lpstrFile = szFile;
    ofn.nMaxFile = MAX_PATH;
    ofn.lpstrFilter = "Fichier TXT (*.TXT)\0*.TXT\0";
    ofn.nFilterIndex = 1;
    ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | OFN_ALLOWMULTISELECT;
     
     
    if (GetOpenFileName(&ofn)==TRUE)
     { 
        nom_chemin = szFile;
     
        hSearch = FindFirstFile(nom_chemin.c_str(), &File);
        if (hSearch != INVALID_HANDLE_VALUE)
           {
                do
                    {            
                    SendMessage(EditHandle, EM_SETSEL, 1000000000, 1000000000);
                    SendMessage(EditHandle, EM_REPLACESEL, 0, (LPARAM)"\r\n\r\n\r\n");
                    SendMessage(EditHandle, EM_REPLACESEL, 0, (LPARAM)File.cFileName);     
                    }
                while (FindNextFile(hSearch, &File));
                }
     }

  7. #7
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 206
    Points : 83
    Points
    83
    Par défaut
    Je sens bien qu'il y a une coquille car le premier paramètre de FindFirstFile est le chemin du répertoire ainsi que le filtre de fichier à appliquer alors que moi je lui donne le chemin et les noms des fichiers sélectionnés par l'utilisateur.
    Pour le coup la fonction me retourne 0xffffffff et là c'est pas bon du tout.

    Personne pour m'aider, pour me dire comment réaliser une sélection de plusieurs fichiers dans une fenêtre d'ouverture de fichiers ?

  8. #8
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Je ne suis pas un expert en programmation Windows étant donné que je suis sur Linux Ubuntu mais je pense qu'il faut que tu extraits toi-même les informations contenu dans le buffer retourné par la fenêtre.

    Tu dois extraire le chemin jusqu'au premier fichier puis ensuite boucler avec une boucle while tout en utilisant par exemple la fonction strchr pour retrouner à chaque fois le prochain caractère NULL tout en n'oubliant pas de récupérer la sous-chaîne à chaque itération. A chaque itération il faut aussi tester si le caractère suivant n'est pas NULL auquel cas la chaîne s'arrête ici et il faut sortir de la boucle.

    C'est une méthode parmis d'autre, on aurait aussi très bien pu utiliser strtok sauf que celle-ci s'arrête dès qu'elle rencontre un caractère NULL donc faut tout faire soi-même à moins bien sûr que l'API Win32 fournit une fonction pour ca mais je la connais pas dans ce cas
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  9. #9
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 206
    Points : 83
    Points
    83
    Par défaut
    Oui Franck, c'est ce que je me proposais de faire au départ mais partant du principe que la fonction OpenFileName autorise la sélection multiple c'est que le traitement de cette sélection doit aussi être prévue non ?

    j'attends un peu des fois que quelqu'un aurait une idée lumineuse et sinon je ferai le traitement "à l'ancienne"

  10. #10
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 206
    Points : 83
    Points
    83
    Par défaut
    Personne n'a jamais été confronté au problème ?

    Si quelqu'un avait quelques lignes de code en exemple cela serait sympathique, je me refuse de croire que microsoft n'a pas prévu une solution propre pour traiter une sélection multiple

  11. #11
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Désolé je ne suis pas sur Windows mais le faire soi-même reste un bon exercice de traitement des chaînes de caractères :p
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  12. #12
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 206
    Points : 83
    Points
    83
    Par défaut
    Oui Franck, je suis tout à fait d'accord avec toi, d'ailleurs je travaille un peu à cette méthode pour récupérer mes fichiers sélectionnés, mais en dehors de cela, il me semble qu'il doit exister un moyen beaucoup plus rapide puisque la fonction OpenFileName offre la possibilité du multiselect c'est que "la suite" doit être prévue.

    Bref, je trouve dommage de devoir réinventer la machine à courber les bananes alors qu'elle existe surement.

  13. #13
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par Taiby Voir le message
    Bref, je trouve dommage de devoir réinventer la machine à courber les bananes alors qu'elle existe surement.
    Celle là je l'avais pas encore entendu/lu ... Cela dit d'après moi, vu qu'il donnent par endroits des fonctions pour faire certaines choses, s'il y avais une fonction permettant de récupérer la liste des fichiers, ils l'auraient également fournie dans la description, donc d'après moi c'est à chacun de se débrouiller, tout n'est jamais fournit
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  14. #14
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 206
    Points : 83
    Points
    83
    Par défaut
    Peut-être que tu as raison Franck et que chacun doit travailler son code mais je trouverais cela étrange car en VB cela existe, c'est traité en "deux coups les grosses".

    En attendant je me suis débrouillé en créant myself le traitement des fichiers en sélection multiple. Je metrs le code ici, si cela peut servir un jour à quelqu'un...

    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
     
    char * nom_fich;
     
    ZeroMemory(&ofn, sizeof(OPENFILENAME));
    ofn.lStructSize = sizeof(OPENFILENAME);
    ofn.hwndOwner = MainHandle;
    ofn.lpstrFile = szFile;
    ofn.nMaxFile = MAX_PATH;
    ofn.lpstrFilter = "Fichier TXT (*.TXT)\0*.TXT\0";
    ofn.nFilterIndex = 1;
    ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | OFN_ALLOWMULTISELECT;
     
    if (GetOpenFileName(&ofn)==TRUE)
       { 
        string tmp_file = szFile;   //récupération du chemin et des noms de fichiers               
        size_t ext_pos = tmp_file.find_last_of( '\\' );   //détection de la fin du chemin
        string noms = tmp_file.substr( ext_pos+1, tmp_file.size()  );   //récupération des noms de fichiers
        size_t size= noms.size() + 1;           //convertion ...
        char * buffer = new char[size];           //...d'un string ...
        strncpy( buffer, noms.c_str(), size);   //...en char
        nom_fich = strtok (buffer,  " ");   //décomposition de la chaîne de noms de fichiers                           
         while( nom_fich != NULL)     //dernier fichier traité 
            {                                             
            //ICI  Traitement sur le fichier
            nom_fich = strtok (NULL,  " ");       
            }        
        delete [] buffer;
        }

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

Discussions similaires

  1. [Débutant] Ouvrir plusieur fichier avec mon programme
    Par yopiyoussef dans le forum C#
    Réponses: 3
    Dernier message: 14/11/2011, 18h02
  2. [Débutant] Boucle avec fopen pour ouvrir plusieurs fichiers
    Par black cat747 dans le forum MATLAB
    Réponses: 7
    Dernier message: 08/12/2010, 15h55
  3. Ouvrir un fichier avec une appli déjà lancée
    Par Cameleon45 dans le forum Langage
    Réponses: 5
    Dernier message: 04/01/2006, 17h42
  4. Zipper plusieurs fichiers avec Abbrevia TP
    Par alex4 dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 17/11/2004, 08h00
  5. ouvrir plusieurs fenetre avec un lien
    Par demanghonj dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 21/10/2004, 10h35

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