Ifstream

Signaler
Messages postés
42
Date d'inscription
mardi 19 avril 2011
Statut
Membre
Dernière intervention
24 juin 2011
-
Messages postés
305
Date d'inscription
jeudi 29 avril 2004
Statut
Membre
Dernière intervention
18 janvier 2012
-
Bonjour!

J'aurais voulu savoir si s'était possible de passer une variable en paramétre d'un
"ifstream()"?
Car je voudrais lire un fichier dont le chemin est enregistré dans une variable, mais le probléme c'est quand j'écrit:

std::ifstream file(chemin);

cela me donne l'erreur:

error C2664: 'std::basic_ifstream<_Elem,_Traits>::basic_ifstream(const char *, std::ios_base::openmode,int)' : impossible de convertir le paramètre 1 de 'System::String ^' en 'const char *'

Merci d'avance!!

9 réponses

Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1
salut,


Il suffit de trouver dans la classe String la méthode qui permet de renvoyer la chaîne ascii.

Ifstream prends 3 paramètres, il serait peut-être pas mal de consulter la doc à son sujet. Après avoir consulté celle de la classe String bien sûr.

@++
Messages postés
3834
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
20 octobre 2021
124
std::ifstream file(chemin.c_str()).

Ifstream prends 3 paramètres,

Deux, non ? Le chemin et le mode (qui est par défaut suffisant et donc facultatif).
A moins qu'en .Net, il en ait ajouté un.

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
Ils n'ont rien ajouté car ifstream n'a rien à faire dans du .NET qui a des classes pour les fichiers comme pour quasi tout le reste.

ciao...
BruNews, MVP VC++
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1
@ CptPingu: n'assimilant pas paramètre par défaut à "pas de paramètre", j'ai simplement compté les virgules:

std::basic_ifstream<_Elem,_Traits>::basic_ifstream(const char *, std::ios_base::openmode,int)'
Messages postés
3834
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
20 octobre 2021
124
D'après la doc, il n'y a que deux paramètres:
http://www.cplusplus.com/reference/iostream/ifstream/ifstream/

Comme tu as éveillé ma curiosité :p, j'ai jeté un oeil directement aux sources de <fstream> (dans /usr/include/c++).
Je ne vois aucune trace d'un constructeur à trois arguments.
 // [27.8.1.5] Template class basic_ifstream
  /**
   *  @brief  Controlling input for files.
   *  @ingroup io
   *
   *  This class supports reading from named files, using the inherited
   *  functions from std::basic_istream.  To control the associated
   *  sequence, an instance of std::basic_filebuf is used, which this page
   *  refers to as @c sb.
   */
  template<typename _CharT, typename _Traits>
    class basic_ifstream : public basic_istream<_CharT, _Traits>
    {
    public:
      // Types:
      typedef _CharT 					char_type;
      typedef _Traits 					traits_type;
      typedef typename traits_type::int_type 		int_type;
      typedef typename traits_type::pos_type 		pos_type;
      typedef typename traits_type::off_type 		off_type;

      // Non-standard types:
      typedef basic_filebuf<char_type, traits_type> 	__filebuf_type;
      typedef basic_istream<char_type, traits_type>	__istream_type;

    private:
      __filebuf_type	_M_filebuf;

    public:
      // Constructors/Destructors:
      /**
       *  @brief  Default constructor.
       *
       *  Initializes @c sb using its default constructor, and passes
       *  @c &sb to the base class initializer.  Does not open any files
       *  (you haven't given it a filename to open).
       */
      basic_ifstream() : __istream_type(), _M_filebuf()
      { this->init(&_M_filebuf); }

      /**
       *  @brief  Create an input file stream.
       *  @param  s  Null terminated string specifying the filename.
       *  @param  mode  Open file in specified mode (see std::ios_base).
       *
       *  @c ios_base::in is automatically included in @a mode.
       *
       *  Tip:  When using std::string to hold the filename, you must use
       *  .c_str() before passing it to this constructor.
       */
      explicit
      basic_ifstream(const char* __s, ios_base::openmode __mode = ios_base::in)
      : __istream_type(), _M_filebuf()
      {
this->init(&_M_filebuf);
this->open(__s, __mode);
      }


On doit avoir une implémentation différente. Je serais dans ce cas curieux de savoir à quoi sert ce 3ème argument et sur quelle plateforme tu es.
Pour ma part, c'est la version 4.5.2 de gcc, sous Linux.

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
Messages postés
3834
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
20 octobre 2021
124
J'ai ma réponse: http://msdn.microsoft.com/en-us/library/aa243815%28v=vs.60%29.aspx
Sous Windows, la STL n'est pas implémentée de la même manière, et il y a une option en plus pour gérer une option spécifique à cet OS.

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
Pour johnASP c'est ici:
http://msdn.microsoft.com/fr-fr/library/k3352a4t(VS.80).aspx

ciao...
BruNews, MVP VC++
Messages postés
11
Date d'inscription
dimanche 24 avril 2011
Statut
Membre
Dernière intervention
24 août 2011

En c++ je sais qu'on peux le faire. sa donne sa :

string chemin = "ton_chemin";
ifstream monFlux(chemin.c_str())
{

}


The power is mine !!
Messages postés
305
Date d'inscription
jeudi 29 avril 2004
Statut
Membre
Dernière intervention
18 janvier 2012

En c++ oui chikusa c'est bien ça.
Mais ceux qui disent qu'il y'a deux paramètres ont raison aussi mais il est facultatif pour les ifstream & ofstream. C'est pour les fstream (la classe mère) il permet de spécifier le mode d'accès: ios::in, ois::out, ios::app ... Et bien sur c'est du c++ pas du dotnet