Article View: be.comp.programming
Article #16436Re: c++ fstream.open(string);
From: Frank Bailleul
Date: Mon, 08 May 2000 00:00
Date: Mon, 08 May 2000 00:00
92 lines
3448 bytes
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-mailReferences:
<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