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 :

Probleme avec CFile


Sujet :

MFC

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Vosges (Lorraine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 28
    Par défaut Probleme avec CFile
    Bonjour, je veux ouvrir un fichier en lecture, et j'ai vu qu'on pouvait le faire avec CFile, CStdioFile, et ifstream.
    Comme je suis avec VC et les MFC, je me suis dis qu'il serai mieux de se servir de CFile plutot que ifStream, mais la, probleme !

    Voila mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    bool CBulletinDlg::SvgDonnees(CString sFichier)
    {   
        bool ok = false;
        //ouverture du fichier
        CFile myFile;
     
        if ( myFile.Open( sFichier, CFile::modeRead ))
        {
            ok = true;
        }
        return ok;
    }
    et voila l'erreur que le debuggeur me met :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Error	1	error C2440: '=' : cannot convert from 'CString' to 'char *'
    Alors, que faire ?

  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,
    tu es sur que l'erreur rapportée correspond au code montré ?
    je ne vois pas d'affectation dans ton code .

  3. #3
    Membre éprouvé Avatar de GP77
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 111
    Par défaut
    Essaie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if ( myFile.Open( &sFichier, CFile::modeRead ))
    La fonction demande un LPCTSTR...

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Vosges (Lorraine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 28
    Par défaut
    C'est au niveau de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if ( !myFile.Open( sFichier, CFile::modeRead ))
    la variable sFichier, il ne veut pas la convertir en char* et quand je le fait manuellement avant
    (char*)sFichier
    ,il me met la meme erreur, c'est null

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Vosges (Lorraine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 28
    Par défaut
    je viens de mettre la petite esperluette '&', et la, voila l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    error C2664: 'CFile::Open' : cannot convert parameter 1 from 'CString *__w64 ' to 'LPCTSTR'

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Vosges (Lorraine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 28
    Par défaut
    J'ai trouvé la solution, il fallait que je convertisse mon CString en char* :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        char* nom_fic = (char*)LPCTSTR(strFichier); 
        CFile myFile;
     
        if ( !myFile.Open( nom_fic, CFile::modeRead ))
            MessageBox("impossible d'ouvrir le fichier");
        else
            MessageBox("Ouverture ok");
    merci pour le coupe de main

  7. #7
    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
    ce n'est absolument pas normal ,Open accepte en argument un objet CString .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    bool ok = false;
        //ouverture du fichier
        CFile myFile;
    	CString sFichier="toto";
        if ( myFile.Open( sFichier, CFile::modeRead ))
        {
            ok = true;
        }
    ce code compile sans probleme.
    tu dois etre en Unicode ....


  8. #8
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 392
    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 392
    Par défaut
    Non, on ne convertit pas en char *.
    En char const peut-être, mais le char * viole la sécurité de la classe.

    D'ailleurs, CFile::Open() prend un LPCTSTR en paramètre, donc un TCHAR const *



    Si ça se trouve, ton erreur résidait uniquement dans le fait que tu aies fait quelque part un char* nom_fic = strFichier.

    Pour éviter ce genre de problèmes, conseil n°1: Apprenez à bien utiliser const!
    et conseil n°2 : Utiliser les opérateurs de conversion du C++! Si vous avez besoin d'un const_cast, c'est très souvent parce que vous avez fait une erreur.
    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.

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

Discussions similaires

  1. [MFC] probleme avec CFile
    Par benahpets dans le forum MFC
    Réponses: 12
    Dernier message: 18/08/2005, 10h29
  2. Probleme avec la copie des surfaces
    Par Black_Daimond dans le forum DirectX
    Réponses: 3
    Dernier message: 09/01/2003, 10h33
  3. probleme avec la touche F10
    Par b.grellee dans le forum Langage
    Réponses: 2
    Dernier message: 15/09/2002, 22h04
  4. Probleme avec fseek
    Par Bjorn dans le forum C
    Réponses: 5
    Dernier message: 04/08/2002, 07h17
  5. [Kylix] probleme avec un imagelist
    Par NicoLinux dans le forum EDI
    Réponses: 4
    Dernier message: 08/06/2002, 23h06

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