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++

Vue hybride

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

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

    Informations forums :
    Inscription : Février 2010
    Messages : 1 624
    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 624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Février 2010
    Messages : 1 624
    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 624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Février 2010
    Messages : 1 624
    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 290
    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 290
    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.

+ 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, 19h48
  2. [Conversion]Applet Java Vers Java Web Start
    Par robin206 dans le forum JWS
    Réponses: 2
    Dernier message: 20/04/2005, 09h28
  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, 11h24
  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, 22h55

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