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 :

Récupération d'un nom de fichier


Sujet :

C++

  1. #1
    Futur Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 8
    Points : 5
    Points
    5
    Par défaut Récupération d'un nom de fichier
    Bonjour,

    Je débute sous C/C++ et j'aimerais coder une appli pour le boulot.
    Mon problème est que j'ai pris le code d'une boîte de dialogue d'ouverture de fichier (jusque là pas de soucis) mais j'aimerais récupéré le nom de fichier choisi pour l'inclure dans une commande system.

    En effet, je dois appeler un .exe qui nécessite en argument le nom de fichier source.

    Pouvez-vous m'aider please ?

  2. #2
    Membre expérimenté Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Points : 1 544
    Points
    1 544
    Par défaut
    bonjour,

    voir les fonction system() et exec()

    je sias plus laquelle conviendra le mieux a ton probleme, a voir dans le MAN

  3. #3
    Futur Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    J'ai bien utilisé la fonction system(...)
    mais mon soucis réside dans le fait de comment récupérer le nom de fichier pour l'inclure dans cette fonction, par une variable ?

    ex : system(monexe.exe nomdufichier_ouvertvialaboite)

  4. #4
    Membre expérimenté Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Points : 1 544
    Points
    1 544
    Par défaut
    en faisant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    system( "nom_de_ton_exe.exe nom_de_ton_fichier" );
    ca marche pas ?

  5. #5
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par t0ny95 Voir le message
    Mon problème est que j'ai pris le code d'une boîte de dialogue d'ouverture de fichier (jusque là pas de soucis)
    Peux-tu être plus précis? S'il s'agit de CFIleDialog (MFC/Windows), alors le nom du fichier se récupère via GetPathName comme aurait pu te le dire le MSDN.
    Sinon, précises quelle classe/fctn tu utilises?

  6. #6
    Futur Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Voici en le code, ça sera plus explicite :


    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
     
    #include <windows.h>
     
    #define IDM_QUIT 1
    #define IDM_OPEN 2
    #define IDM_SAVE 3
    #define IDM_ABOUT 4
    #include <stdio.h>
    #include <stdlib.h>
     
     
     
    HINSTANCE hinst;
     
    LRESULT CALLBACK MainWndProc(HWND, UINT, WPARAM, LPARAM);
     
     
    int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hPrevInstance,
                                                    LPSTR lpCmdLine, int nCmdShow)
    {
        HWND hwnd;
        MSG msg;
        WNDCLASS wc;
     
        HMENU hMenu, hSousMenu, hMenu1, hSousMenu1;
     
        hinst = hinstance;
     
        wc.style = 0 ;
        wc.lpfnWndProc = MainWndProc;
        wc.cbClsExtra = 0;
        wc.cbWndExtra = 0;
        wc.hInstance = hinstance;
        wc.hIcon = NULL;
        wc.hCursor = LoadCursor(NULL, IDC_ARROW);
        wc.hbrBackground = NULL;
        wc.lpszMenuName =  NULL;
        wc.lpszClassName = "MaWinClass";
     
        if(!RegisterClass(&wc)) return FALSE;
     
        hSousMenu = CreateMenu();
     
        AppendMenu(hSousMenu, MF_STRING, IDM_OPEN, "Ouvrir...");
        AppendMenu(hSousMenu, MF_STRING, IDM_SAVE, "Enregistrer...");
        AppendMenu(hSousMenu, MF_SEPARATOR, 0, NULL);
        AppendMenu(hSousMenu, MF_STRING, IDM_QUIT, "Quitter");
        hMenu  = CreateMenu();
        AppendMenu(hMenu,MF_POPUP,(UINT)hSousMenu,"Fichier");
        hSousMenu = CreateMenu();
        AppendMenu(hSousMenu, MF_STRING, IDM_ABOUT, "A Propos...");
     
     
        AppendMenu(hMenu,MF_POPUP,(UINT)hSousMenu,"Aide");
     
     
     
        hwnd = CreateWindow("MaWinClass", "XRT Tool Box v0.1", WS_OVERLAPPEDWINDOW,
                                       CW_USEDEFAULT, CW_USEDEFAULT, 640, 300,
                                                       NULL, hMenu, hinstance, NULL);
        if (!hwnd)  return FALSE;
     
        ShowWindow(hwnd, nCmdShow);
     
        while (GetMessage(&msg, NULL, 0, 0))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
     
        return msg.wParam;
    }
     
    /******************************************************************************/
     
    LRESULT CALLBACK MainWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
        static HWND hEdit;
        static BOOL EditNotChg = TRUE;
     
        switch (uMsg)
        {
            case WM_CREATE:
                {
                 HFONT hFont;
     
                 hEdit = CreateWindow("edit", "Texte", WS_CHILD | WS_VISIBLE |
                                       ES_MULTILINE | ES_WANTRETURN | WS_VSCROLL,
                                               0, 0, 0, 0, hwnd, NULL, hinst, NULL);
                 hFont = (HFONT)GetStockObject(ANSI_FIXED_FONT);
                 SendMessage(hEdit,WM_SETFONT,(UINT)hFont,TRUE);
                 SendMessage(hEdit, EM_SETMARGINS, EC_LEFTMARGIN | EC_RIGHTMARGIN,
                                                                    MAKELONG(5, 5));
                 return 0;
                }
     
            case WM_CLOSE:
                if(EditNotChg ||
                   MessageBox(hwnd,"Le texte a été modifié.\r\nEtes vous sûr de \
    vouloir fermer l'application ?"
                                ,"Question ?",MB_YESNO | MB_ICONQUESTION ) == IDYES)
                                                                DestroyWindow(hwnd);
                return 0;
     
            case WM_COMMAND:
                if(LOWORD(wParam) == IDM_OPEN)
                  {
     
                    OPENFILENAME ofn;
                    CHAR szFile[MAX_PATH]={0};
                    ZeroMemory(&ofn, sizeof(OPENFILENAME));
    #ifdef OPENFILENAME_SIZE_VERSION_400
                    ofn.lStructSize = OPENFILENAME_SIZE_VERSION_400;
    #else
                    ofn.lStructSize = sizeof(OPENFILENAME);
    #endif
                    ofn.hwndOwner = hwnd;
                    ofn.lpstrFile = szFile;
                    ofn.nMaxFile = MAX_PATH;
                    ofn.lpstrFilter =
                               "Fichier\0*.*\0";
                    ofn.nFilterIndex = 1;
                    ofn.Flags =
                           OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
                    if (GetOpenFileName(&ofn)==TRUE)
                     {
     
     
                        HANDLE hf;
                        DWORD FileSize,nbcharRead ;
                        char *buffer;
     
                        hf = CreateFile(szFile, GENERIC_READ, 0,NULL,
                                        OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
                        FileSize = GetFileSize(hf, NULL);
                        buffer = (char*)LocalAlloc(LMEM_FIXED, FileSize+1);
                        ReadFile(hf, buffer, FileSize, &nbcharRead, NULL) ;
                        buffer[FileSize] = 0;
                        SendMessage(hEdit, WM_SETTEXT, 0, (LPARAM)buffer);
     
     
                   system ("test.exe nom_du_fichier");
                        LocalFree(buffer);
                        CloseHandle(hf);
                     }
                  } /*if IDM_ABOUT*/
     
                if(LOWORD(wParam) == IDM_SAVE)
                  {
                    OPENFILENAME ofn;
                    CHAR szFile[260]={0};
     
                    ZeroMemory(&ofn, sizeof(OPENFILENAME));
    #ifdef OPENFILENAME_SIZE_VERSION_400
                    ofn.lStructSize = OPENFILENAME_SIZE_VERSION_400;
    #else
                    ofn.lStructSize = sizeof(OPENFILENAME);
    #endif
                    ofn.hwndOwner = hwnd;
                    ofn.lpstrFile = szFile;
                    ofn.nMaxFile = sizeof(szFile);
                    ofn.lpstrFilter =
                               "Fichier\0*.*\0";
                    ofn.nFilterIndex = 1;
                    ofn.Flags =
                           OFN_PATHMUSTEXIST | OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT;
                    if (GetSaveFileName(&ofn)==TRUE)
                     {
                        HANDLE hf;
                        DWORD FileSize,nbcharRead ;
                        char *buffer;
                        FileSize = GetWindowTextLength(hEdit);
                        buffer = (char*)LocalAlloc(LMEM_FIXED, FileSize+1);
                        GetWindowText(hEdit, buffer, FileSize+1);
                        hf = CreateFile(szFile, GENERIC_WRITE, 0,NULL,
                                        CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
                        WriteFile(hf, buffer, FileSize, &nbcharRead, NULL) ;
                        CloseHandle(hf);
                        LocalFree(buffer);
                     }
                  } /*if IDM_SAVE*/
     
                  if(LOWORD(wParam) == IDM_ABOUT)
                  {
     
     
     
                  } /*if IDM_ABOUT*/
     
                if(LOWORD(wParam) == IDM_QUIT) PostMessage(hwnd, WM_CLOSE,0,0);
                if(HIWORD(wParam) == EN_CHANGE) EditNotChg = FALSE;
                return 0;
     
            case WM_SIZE:
                 MoveWindow(hEdit, 0, 0, LOWORD(lParam), HIWORD(lParam), TRUE);
                 return 0;
     
            case WM_DESTROY:
                PostQuitMessage(0);
                return 0;
     
            default:
                return DefWindowProc(hwnd, uMsg, wParam, lParam);
        }
    }

    C'est donc pour la fonction system ("test.exe nom_du_fichier"); mon problème

  7. #7
    Membre éprouvé
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Points : 1 067
    Points
    1 067
    Par défaut
    D'abord,

    Ensuite, il faut que tu passes par une variable:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char MaCommande[MAX_PATH];
    sprintf(MaCommande, "test.exe %s", szFile);
    system(MaCommande);
    NB : Ce code est pour une utilisation ANSI. Voir doc pour UNICODE ou utilisation de TCHAR.

  8. #8
    Futur Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Oups désolé pour les balises.
    Bon ya un mieux avec ton code, je te remercie. Mais ça ne prends pas le path complet.

    Mon exe me retourne l'erreur suivante : Can't open file 'D:\Fichiers'

    Alors que le path complet est : D:\Fichiers De tests\VIR160.AFB

    Auriez-vous une idée ?

  9. #9
    Membre éprouvé
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Points : 1 067
    Points
    1 067
    Par défaut
    Il faut que tu rajoutes des guillemets:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char MaCommande[MAX_PATH];
    sprintf(MaCommande, "test.exe \"%s\"", szFile);
    system(MaCommande);

  10. #10
    Futur Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Yes !!!!
    Merci à vous tous.

    Je pense que je vais encore vous embêter bientôt

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

Discussions similaires

  1. Récupération d'un nom de fichier lors de l'upload
    Par adel25 dans le forum Langage
    Réponses: 3
    Dernier message: 01/02/2009, 19h39
  2. script batch - récupération d'un nom de fichier
    Par persam dans le forum Windows
    Réponses: 1
    Dernier message: 19/07/2007, 10h45
  3. Récupération d'un nom de fichier et d'un répertoire
    Par laurentdepibrac dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 04/07/2007, 10h36
  4. [RegEx] Récupération d'un nom de fichier
    Par cbb51800 dans le forum Langage
    Réponses: 5
    Dernier message: 14/11/2006, 09h36
  5. Récupération d'un nom de fichier
    Par chmaichel dans le forum Delphi
    Réponses: 17
    Dernier message: 10/07/2006, 15h13

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