🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: be.comp.programming
Article #16436

Re: c++ fstream.open(string);

#16436
From: Frank Bailleul
Date: Mon, 08 May 2000 00:00
92 lines
3448 bytes
"Kristof Verhenne" <kristof@localhost.localdomain> wrote in message
news:2sp5f8.ep.ln@localhost.localdomain...
> Bert Salaets <bert.salaets@student.groept.be>
>  could not resist the temptation and  wrote:
> > Is er een manier om een filename aan te geven mbv een string?
> >
> > Dit werkt dus niet
> >
> > void functie()
> > {
> >     string filename;
> >     filename = "filename.ext";
> >     ifstream iets;
> >     iets.open(filename);  file://Dit werkt dus niet
> >     iets.close(filename);
> >     return;
> > }
> >
> Dit is zeker java of je gebruikt een stringclass?  Soit, in c++
> (wat er toch erg op gelijkt) moet je er nog bij zetten in welke
> modus je het spul opent.
> Dus
> iets.open(filename,ios::xxx)
> met xxx gelijk aan in voor invoer, out voor uitvoer, app voor bij
> te schrijven.
> Je kan ook voor in- en uitvoer, dan wordt het
> iets.open(filename,ios::in|ios::out);

Met alle respect, maar dat was niet de fout.
Als je de mode-opties niet meegeeft, dan worden er default
parameters gebruikt.

Nu hangt het er wel van af welke "versie" van C++ je gebruikt.
Er zijn wat verschillen tussen ISO C++ en ARM C++. De ARM C++
is de voorloper van de recentste standaard, ISO C++.

ARM C++:
  ifstream( const char* szName, int nMode = ios::in, int nProt =
filebuf::openprot );
  void open( const char* szName, int nMode = ios::in, int nProt =
filebuf::openprot );

ISO C++:
  explicit basic_ifstream(const char *s, ios_base::openmode mode =
ios_base::in);
  void open(const char *s, ios_base::openmode mode = ios_base::in);

waarbij basic_ifstream een template class is en ifstream de volgende type
definitie:

  typedef basic_ifstream<char, char_traits<char> > ifstream;

Uit beide signaturen van de constructor en de method open() blijkt dat voor
de eerste parameter
een const char* verwacht wordt.

Vermits een string object niet gelijk is aan een const char*, zal de
compiler reclameren.
Je moet dus het string object converteren naar een const char*. Dit kan met
de method
string::c_str().

Probeer dus het volgende:

string filename = "filename.ext:";
ifstream in(filename.c_str());

of

string filename = "filename.ext:";
ifstream in;
in.open(filename.c_str());


>
> Ik zou je aanraden eens wat documentatie te lezen over I/O

Dit is een goede raad. Je kan ook een goed boek kopen over C++.
Een van mijn favorieten is The C++ Programming Language van Bjarne
Stroustrup.

Groeten,

Frank Bailleul


> --
> Kristof Verhenne                   | Hi, I'm a signature virus, plz
> Kristof.Verhenne@rug.ac.be         | set me in your signature and
> http://studwww.rug.ac.be/~kverhenn | help me spread :-)
>
Technical Details
Message-ID: <CjAR4.5245$vk3.95600@news.chello.be>
Path: arc1-ca.pugleaf.net!unknown!not-for-mail
References: <39159447.C5FFD09C@student.groept.be> <2sp5f8.ep.ln@localhost.localdomain>

Show Full Headers
Complete Article Headers
X-Google-Language: DUTCH,ASCII-7-bit
X-Google-Thread: fcea4,6aabea9a7f805869
X-Google-Attributes: gidfcea4,public
From: "Frank Bailleul" <frank.bailleul@tvd.be>
Subject: Re: c++ fstream.open(string);
Date: 2000/05/08
Message-ID: <CjAR4.5245$vk3.95600@news.chello.be>
X-Deja-AN: 620671315
References: <39159447.C5FFD09C@student.groept.be> <2sp5f8.ep.ln@localhost.localdomain>
X-Priority: 3
X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2919.6600
X-Complaints-To: abuse@chello.be
X-Trace: news.chello.be 957796706 195.162.216.204 (Mon, 08 May 2000 16:38:26 MET DST)
Organization: Chello Usenet Service
X-MSMail-Priority: Normal
NNTP-Posting-Date: Mon, 08 May 2000 16:38:26 MET DST
Newsgroups: be.comp.programming