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

Windows Discussion :

Probléme lecture fichier text.


Sujet :

Windows

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Australie

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6
    Points : 1
    Points
    1
    Par défaut Probléme lecture fichier text.
    Bonjour,

    Débutant en programmation, dans le cadre de mon projet tutoré, j'utilise la fonction de l'API windows "GETOPENFILENAME" pour permettre à l'utilisateur de choisir son fichier texte.
    Le chemin est retourné par la variable "char szFile[260];".
    J'aimerais maintenant utiliser cette variable dans la fonction suivante, qui me permettra ensuite de lire le contenu du fichier text:

    std::ifstream fichier( "C:\\fichier.txt" );
    en remplacant par :

    std::ifstream fichier( szFile);
    Le programme se compile, mais quand j'execute en pas à pas, la fonction ifstream n'arrive pas à lire la variable szFile.

    Pour quelle raison ? et comment passer en paramètre ma variable szFile à la place du chemin "en dur" ... ?

    Cordialement.

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Commence par afficher le contenu de la variable en question, et assure-toi de ne pas avoir de problèmes de char/TCHAR/wchar_t.

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Australie

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Merci pour cette première réponse,

    cette variable quand je l'affiche dans un edit j'ai bien le chemin :
    "C:\....", par contre quand je regarde la variable en pas à pas, cette variable m'affiche "C:\\....", je comprend pas pourquoi l'edit enléve un '\', je pense que le probléme vient de là, puisque la fonction ifstream requière deux '\' pour fonctionner ....

    ps : la fonction getopenfilename ici : http://msdn.microsoft.com/en-us/libr...8VS.85%29.aspx

    et ma variable "szFile" correspond à " LPTSTR lpstrFile;" dans la fonction.

  4. #4
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Points : 1 956
    Points
    1 956
    Par défaut
    Bonjour,

    si tu compiles avec _UNICODE défini (par défaut sous Visual C++) alors LPTSTR map vers LPWSTR (donc WCHAR / wchar_t) et c'est GetOpenFileNameW qui est choisi.

    Soit tu choisi explicitement GetOpenFileNameA pour ouvrir avec std::ifstream, soit tu utilises std::wifstream pour la version unicode.

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Australie

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Bonjour et merci d'essayer de m'aider,

    Alors déja j'utilise GCC comme compilateur (CodeBlocks), par contre j'ai pas vraiment compris quel modification je devais apporter à mon programme, j'essaye de détailler mon soucis en vous joignant mon code correspondant :

    if ((LOWORD(wParam) == ID_BUTTON) && (HIWORD(wParam) == BN_CLICKED)) //L'utilisateur clique sur un bouton "parcourir".
    {
    OPENFILENAME ofn; //Boîte de dialogue.
    char szFile[260]; //buffer pour le nom du fichier.
    HANDLE hf;

    // initialisation de OPENFILENAME
    ZeroMemory(&ofn, sizeof(OPENFILENAME));
    ofn.lStructSize = sizeof(OPENFILENAME);
    ofn.hwndOwner = hwnd;
    ofn.lpstrFile = szFile; //je range le chemin dans "szFile"
    ofn.nMaxFile = sizeof(szFile);
    ofn.lpstrFilter = "Fichier texte\0*.TXT"; //filtre les fichiers txt
    ofn.nFilterIndex = 1;
    ofn.lpstrFileTitle = NULL;
    ofn.nMaxFileTitle = 0;
    ofn.lpstrInitialDir = NULL;
    ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;

    //Affichage de la box
    if(GetOpenFileName(&ofn)==TRUE)
    hf = CreateFile(ofn.lpstrFile, GENERIC_READ,0, (LPSECURITY_ATTRIBUTES) NULL,OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,(HANDLE) NULL);

    SetWindowText(Edit, szFile); //j'envoi le chemin dans un edit

    std::ifstream fichierLecture(szFile); //j'envois le chemin dans la fonction ifstream, pour lire le contenu du fichier txt
    if(fichierCompteur)
    {
    //Impossible de renter dans le if
    }

    Encore une fois je suis loin de maitrîser le c++, donc pardon par avance si ca ressemble un peu à une "usine à gaz"....

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 72
    Points : 77
    Points
    77
    Par défaut
    Bonjour,

    Concernant votre problème de "\", n'oubliez pas qu'en C et C++ ce caractère sert à indiquer un caractère spécial. On le double lorsque c'est effectivement le "\" qu'on veut indiquer.
    Cette indication est utile pour le compilateur mais une fois le programme en cours d'exécution, le débogueur ou les traces affichent la chaîne réelle.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    const char* tabulation = "\t"; /* cette chaîne contient une tabulation */
    const char* fichier = "C:\\toto.txt"; /* cette chaîne contient "C:\toto.txt" */
    Pour votre problème de ifstream, je vois deux choses étranges:
    - pas de CloseHandle(hf) avant l'utilisation de ifstream, si votre code est passé sur le CreateFile(). N'oubliez pas que la ligne de code "ofn.lpstrFile = szFile" fait que lorsque vous faite CreateFile(ofn.lpstrFile,...) cela revient à faire CreateFile(szFile,...). Comme le fichier n'est pas fermé ensuite, l'utilisation de ifstream échoue.
    - if(fichiercompteur) devrait peut-être être if(fichierLecture.is_open())

    Ainsi la correction donnerait:
    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
    //Affichage de la box
    if(GetOpenFileName(&ofn)==TRUE)
    {
       hf = CreateFile(ofn.lpstrFile, GENERIC_READ,0, (LPSECURITY_ATTRIBUTES) NULL,OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,(HANDLE) NULL);
       if(hf != INVALID_HANDLE_VALUE)
       {
       // Traitement
       ...
       CloseHandle(hf);
       }
    }
    
    SetWindowText(Edit, szFile); //j'envoi le chemin dans un edit
    
    std::ifstream fichierLecture(szFile); //j'envois le chemin dans la fonction ifstream, pour lire le contenu du fichier txt
    if(fichierLecture.is_open())
    {
    //Impossible de renter dans le if
    }

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Australie

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Merci beaucoup Nunch pour cette réponse complète, j'essaye ça demain à la Fac, je vous tiens au courant.

    Cordialement.

  8. #8
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Australie

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Réponse tardive, mais comme je tenais à le faire :

    Merci, ça fonctionne !

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

Discussions similaires

  1. Problème lecture fichier texte
    Par nilsmatlab dans le forum MATLAB
    Réponses: 27
    Dernier message: 22/06/2011, 18h06
  2. Problème lecture fichier texte 315Mo
    Par phoenix420 dans le forum Langage
    Réponses: 9
    Dernier message: 26/05/2010, 10h16
  3. Problème de lecture fichier texte
    Par Draconic dans le forum Visual C++
    Réponses: 1
    Dernier message: 05/08/2007, 18h00
  4. Problème STL lecture fichier texte
    Par Bourrine dans le forum VC++ .NET
    Réponses: 4
    Dernier message: 03/04/2007, 11h57
  5. [VB.NET]Problème lecture fichier texte
    Par zouhib dans le forum Windows Forms
    Réponses: 2
    Dernier message: 29/05/2006, 16h05

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