begin process at 2012 05 30 06:48:10
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Débutant(e)

 > 

Récupérer séparément Nom et Chemin d'un fichier


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Récupérer séparément Nom et Chemin d'un fichier

mercredi 19 mars 2008 à 08:14:54 | Récupérer séparément Nom et Chemin d'un fichier

cartes1

Membre Club
Bonjour
Avec Visual studio C++ 6 en Api pur, je n'arrive pas à récupérer séparément le nom d'un fichier d'un côté et le chemin de l'autre ( sans le nom du fichier) à partir d'une structure OPENFILENAME pour pouvoir les inscrire dans deux controles Edit différents.
Merci d'avance pour les réponses.
Voici le code simplifié:

/***********************************************************************************************/
bool TrouveFichier(HWND hwnd, char* CheminFichier, char*  NomFichier)
/**********************************************************************************************/
{
    OPENFILENAME ofn;
   
    ZeroMemory(&ofn, sizeof(ofn));
    CheminFichier[0] = 0;
   
    ofn.lStructSize = sizeof(ofn);
    ofn.hwndOwner = hwnd;
    ofn.lpstrFilter = "Fichiers de Type (*.pdf)\0*.pdf;*.cmd\0\0";
    ofn.lpstrFile = CheminFichier;
    ofn.nMaxFile = MAX_PATH;
    ofn.lpstrFileTitle = NomFichier;
    ofn.lpstrDefExt = "pdf";
    ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY ;
    if(!GetOpenFileName(&ofn))
        return false;
    return true;
}
///////////
LRESULT CALLBACK ProcedurePrincipale(HWND fenetrePrincipale, UINT message, WPARAM wParam, LPARAM lParam)
switch (message)
    {
   case WM_COMMAND:
      UINT NumeroId = LOWORD(wParam);
       switch(NumeroId)
           {
          case ID_BUTTON3:
            GetWindowText(hEditCheminPDF, CheminFichier,strlen(CheminFichier));
            if(TrouveFichier(fenetrePrincipale, CheminFichier, NomFichier))
               {
             SetWindowText(hEditCheminPDF, CheminFichier);
             SetWindowText(hEditFichierPDF, NomFichier);
               }
          break;
            }
}
////////////////////////////////////////////////////////////////////////////////////
Cartes1
mercredi 19 mars 2008 à 11:13:35 | Re : Récupérer séparément Nom et Chemin d'un fichier

jfrancois

Bonjour,

Voici ce que j'utilise (adapté avec le code proposé avec un petit main() pour tester) :

bool TrouverFichier
(
    HWND        hWnd          // E:handle sur la fenêtre
   ,const char* CheminInitial // E:répertoire de départ
   ,char*       CheminFichier // S:répertoire du fichier sélectionné
   ,char*       NomFichier    // S:nom du fichier sélectionné
)                             // S:sélection réalisée
{
   CheminFichier[0] = 0;

   OPENFILENAME ofn;
   ZeroMemory(&ofn,sizeof(OPENFILENAME));
   ofn.lStructSize     = sizeof(OPENFILENAME);
   ofn.hwndOwner       = hWnd;
   ofn.lpstrFilter     = "Fichiers PDF (*.pdf)\0*.pdf\0\0";
   ofn.lpstrFile       = CheminFichier;
   ofn.nMaxFile        = MAX_PATH;
   ofn.lpstrFileTitle  = NomFichier;
   ofn.nMaxFileTitle   = MAX_PATH;
   ofn.lpstrInitialDir = CheminInitial;
   ofn.lpstrDefExt     = "pdf";
   ofn.Flags           = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY ;
   if (! GetOpenFileName(&ofn)) return false;
   strcpy(CheminFichier,ofn.lpstrFile);
   CheminFichier[ofn.nFileOffset] = 0; // supprimer le nom derrière le chemin
   strcpy(NomFichier,ofn.lpstrFileTitle);
   return true;
}

void main()
{
   char CheminInitial[MAX_PATH] = {"D:\\DEV_DOC\\Win32"};
   char CheminFichier[MAX_PATH] = {0};
   char NomFichier[MAX_PATH]    = {0};
   if (TrouverFichier(NULL,CheminInitial,CheminFichier,NomFichier))
   {
      printf("Repertoire : %s\n",CheminFichier);
      printf("Fichier    : %s\n",NomFichier);
   }
}

Jean-François

mercredi 19 mars 2008 à 18:11:44 | Re : Récupérer séparément Nom et Chemin d'un fichier

cartes1

Membre Club

Bonsoir jfrancois
Merci beaucoup, ça marche super.

j'ai une autre question en rapport avec celle-ci:

Je voudrais remplacer ma Listbox (avec une liste de fichiers) dans ma fenêtre principale en liste de répertoires et fichiers. Est-ce que l'on peut utiliser la fonction Api Windows SHBrowseForFolder? J'ai essayé mais je n'arrive pas à passer de la fenêtre crée avec cette fonction à ma fenêtre principale (j'utilise deux "Dlgprocedure"  différentes) car la fermeture de l'une entraine la fermeture de l'autre.
merci d'avance

Cartes1

mercredi 19 mars 2008 à 21:05:28 | Re : Récupérer séparément Nom et Chemin d'un fichier

jfrancois

Réponse acceptée !

Pas de quoi !

SHBrowseForFolder() est du même genre que GetOpenFileName() dans TrouverFichier() mais permet de sélectionner un répertoire et non un fichier dans un répertoire. Je l'utilise de cette façon (avec l'include de shlobj.h) :

bool TrouverRépertoire
(
    HWND        hWnd     // E:handle de la fenêtre parent
   ,LPSTR       pszDir   // E/S:répertoire
   ,const char* pszTitle // I:titre
)                        // O:répertoire modifié (ou erreur)
{
   char szSelection[MAX_PATH];

   BROWSEINFO bi;
   bi.hwndOwner      = hWnd;
   bi.pidlRoot       = NULL;
   bi.pszDisplayName = szSelection;
   bi.lpszTitle      = (LPCTSTR)pszTitle;
   bi.ulFlags        = BIF_NEWDIALOGSTYLE; // | BIF_EDITBOX;
   bi.lpfn           = 0;
   bi.lParam         = 0;
  
   LPITEMIDLIST pidlBrowse = SHBrowseForFolder(&bi);
   if (pidlBrowse == NULL) return false;

   if (SHGetPathFromIDList(pidlBrowse,szSelection) == FALSE) return false;
   lstrcpy(pszDir,szSelection);
   return true;
}


Jean-François

jeudi 20 mars 2008 à 06:35:26 | Re : Récupérer séparément Nom et Chemin d'un fichier

cartes1

Membre Club
Bonjour jfrancois
Maintenant j'ai toutes les clés en main pour finir mon programme.
encore une fois un grand merci et à bientôt.
Cartes1


Cette discussion est classée dans : fichier, hwnd, nomfichier, ofn, cheminfichier


Répondre à ce message

Sujets en rapport avec ce message

OPENFILENAME [ par mat74 ] salut à tous, voila je voudrais ouvrir une boite dialogue pour enregistrer un fichier, récupérer la valeur de type, et rajouter un bouton suivant la v Problème de récupération de chemin valide [ par piroman14 ] Noobinho is back!!!Je souhaite faire une interface graphique pour un programme que j'ai fait en console et qui marchait correctement.La seule saisie à Problème pour iconiser une application [ par piroman14 ] Noobinho one again!!Bonjour tout le monde!Je serais très reconnaissant si vous pouviez m'aiguiller pour ce programme.Je souhaite iconiser mon applicat besoin d'aide cpp & flash [ par ced73 ] bonjour bonjour ^^ Cela va surement paraitre ridicule, mais il y deux ou trois trucs ou je sèche. Je cherche à charger un flash (.swf) dans une fe eNVIYER DES MESSAGES DANS UNE FENËTRE HeDIT [ par piroman14 ] Bonjour je souhaiterais envoyer des messages au moyen de la fonction SendMessage dans la fenêtre déjà existante hEdit.L'aide n'est pas très fournie. J {help} Recuperer le HWND d'un dialogbox crée dans un fichier ressource [ par bobosss972 ] salut a tous je souhaiterai savoir comment faire pour récupérer le HANDLE HWND d'une dialogbox crée a partir d'un fichier .rc car une fois dans le .Rc Problème avec GetOpenFileName [ par ArthurAuguste ] Bonjour, J'ai un problème avec GetOpenFileName si et seulement si le fichier que j'ouvre fait plus de 93Ko !!!! Si j'ai fait une erreur de programma Conserver messages dans hEdit à chaque envoi de nveau message [ par piroman14 ] Bonjour tout le monde:Dsl mais je suis toujours aussi mauvais en winAPI depuis la dernière fois.Mon problème est que je n'arrive pas à conserver les m WriteFile => caractères non reconnu dans le fichier [ par Flo1987 ] Bonjour,J'ai un problème avec la fonction WriteFile : je cherche à écrire un tableau de double dans un fichier mais je retrouve des caractères non rec Recuperer la notification EN_CHANGE [ par KinNoShishi ] Bonjour à tous, Je suis dans impasse depuis plusieurs heures maintenant... Je n'arrive pas à récupérer le message EN_CHANGE qui me permettrait de pou


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,608 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales