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

Langage C++ Discussion :

Conversion de FILE* vers fstream


Sujet :

Langage C++

  1. #1
    Membre expérimenté Avatar de ManusDei
    Homme Profil pro
    vilain troll de l'UE
    Inscrit en
    Février 2010
    Messages
    1 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : vilain troll de l'UE

    Informations forums :
    Inscription : Février 2010
    Messages : 1 627
    Par défaut Conversion de FILE* vers fstream
    Bonjour,

    j'ouvre un fichier avec l'API windows (donc je récupère un HANDLE), et je cherche à avoir un fstream.

    J'ai compris que je devais passer par plusieurs conversions, et je coince un peu.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int h = _open_osfhandle((long) GetStdHandle(STD_OUTPUT_HANDLE), 0);
    FILE* file = _fdopen(h, "w");
     
    static StandardOutStream stdout_object(file);
    Il me manque le lien de FILE* vers fstream.
    Sauf si il y a une fonction pour passer du descripteur de fichier int (de C) vers fstream directement.

    J'avais essayé ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    fstream file;
    file.attach(_open_osfhandle((long) GetStdHandle(STD_OUTPUT_HANDLE), 0);
     
    static StandardOutStream stdout_object(file);
    Mais j'ai une erreur à la compilation.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    D:\Lecourt\workspace\elm\src\system_SystemIO.cpp:81:1: error: 'fstream' does not name a type
    D:\Lecourt\workspace\elm\src\system_SystemIO.cpp:82:1: error: 'file' does not name a type
    D:\Lecourt\workspace\elm\src\system_SystemIO.cpp:84:40: error: 'file' was not declared in this scope

  2. #2
    screetch
    Invité(e)
    Par défaut
    ?
    ou bien std::fstream?

  3. #3
    Membre expérimenté Avatar de ManusDei
    Homme Profil pro
    vilain troll de l'UE
    Inscrit en
    Février 2010
    Messages
    1 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : vilain troll de l'UE

    Informations forums :
    Inscription : Février 2010
    Messages : 1 627
    Par défaut
    En mettant #include <fstream> et en utilisant std::fstream

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #include <fstream>
     
    std::fstream file(_open_osfhandle((long) GetStdHandle(STD_OUTPUT_HANDLE), 0));
    static StandardOutStream stdout_object(file);
    j'ai ça comme message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    D:\Lecourt\workspace\elm\src\system_SystemIO.cpp:83:77: error: invalid conversion from 'int' to 'const char*'
    D:\Lecourt\workspace\elm\src\system_SystemIO.cpp:83:77: error:   initializing argument 1 of 'std::basic_fstream<_CharT, _Traits>::basic_fstream(const char*, std::ios_base::openmode) [with _CharT = char, _Traits = std::char_traits<char>, std::ios_base::openmode = std::_Ios_Openmode]'
    Pourtant d'après cette page
    http://www.codeproject.com/KB/files/handles.aspx#
    je ne devrais pas avoir de problème de type.

  4. #4
    screetch
    Invité(e)
    Par défaut
    ces méthode n'apparaissent pas dans http://www.cplusplus.com/reference/iostream/fstream/
    je pense qu'elles ne sont pas standard (attach non plus)

  5. #5
    Membre expérimenté Avatar de ManusDei
    Homme Profil pro
    vilain troll de l'UE
    Inscrit en
    Février 2010
    Messages
    1 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : vilain troll de l'UE

    Informations forums :
    Inscription : Février 2010
    Messages : 1 627
    Par défaut
    EN fait mon lien date de 2001. Je suppose que ça doit jouer

    Bref je reviens à mon point de départ, comment passer d'un FILE* à un stream ? Ou carrément d'un HANDLE windows à un stream

  6. #6
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 336
    Billets dans le blog
    2
    Par défaut
    Question bête, mais on ne sait jamais: ne peux-tu pas directement ouvrir un fstream? Je veux dire, sans passer par win32, donc sans utiliser de Handle.

  7. #7
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 308
    Par défaut
    +1 à la remarque de rod.
    Sinon, il y a un adaptateur dans boost.io
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  8. #8
    Membre expérimenté Avatar de ManusDei
    Homme Profil pro
    vilain troll de l'UE
    Inscrit en
    Février 2010
    Messages
    1 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : vilain troll de l'UE

    Informations forums :
    Inscription : Février 2010
    Messages : 1 627
    Par défaut
    En fait je suis "obligé" d'utiliser un HANDLE, vu c'est utilisé par tout un tas d'autres objets, lequels demandent un HANDLE (sinon je dois revoir une bonne partie de l'architecture).

    Mais le problème est réglé, en fait j'écris dans le FILE*, pas besoin de fstream.

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

Discussions similaires

  1. conversion date timestamp vers date mysql
    Par seb0026 dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 13/10/2005, 20h48
  2. [Conversion]Applet Java Vers Java Web Start
    Par robin206 dans le forum JWS
    Réponses: 2
    Dernier message: 20/04/2005, 10h28
  3. [Think Pascal] Portage/conversion Think Pascal vers MAC/Windows/Linux
    Par Alain Vitry dans le forum Autres IDE
    Réponses: 1
    Dernier message: 19/03/2005, 12h24
  4. Conversion distance , angle vers coordonnées de points
    Par mat.M dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 26/03/2004, 23h55

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