[gelöst]C++, Datei mit String als Parameter öffnen
-
- Beiträge: 1973
- Registriert: 16.08.2005 18:15:29
- Lizenz eigener Beiträge: GNU General Public License
- Wohnort: münchen
[gelöst]C++, Datei mit String als Parameter öffnen
Das Ganze spielt sich in einem Objekt ab, dürfte aber wohl keine Rolle spielen.
Ich wollte eine Datei mit einem String als Parameter öffnen.
String ist deklariert in dieser Art.
dateiname = "cpprec.txt";
fstream datei(dateiname, ios::out); //funktioniert nicht
Grund: dateiname muss vom Typ char sein.
Eine Erbschaft von C.
Nun suche ich eine einfache Lösung für die Umwandlung von char[256] nach string.
Muss man im 21. Jahrhundert das selbst schreiben?
Ich wollte eine Datei mit einem String als Parameter öffnen.
String ist deklariert in dieser Art.
dateiname = "cpprec.txt";
fstream datei(dateiname, ios::out); //funktioniert nicht
Grund: dateiname muss vom Typ char sein.
Eine Erbschaft von C.
Nun suche ich eine einfache Lösung für die Umwandlung von char[256] nach string.
Muss man im 21. Jahrhundert das selbst schreiben?
Zuletzt geändert von mampfi am 16.01.2016 22:24:55, insgesamt 1-mal geändert.
Es gibt viele Foren und eine Welt ausserhalb
Re: C++, Datei mit String als Parameter öffnen
mampfi hat geschrieben: String ist deklariert in dieser Art.
dateiname = "cpprec.txt";
Code: Alles auswählen
String x = "cpprec.txt"
s = (const char *) x
Re: C++, Datei mit String als Parameter öffnen
Und was ist der Typ von "dateiname"? Ist das ein char[] oder std::string?mampfi hat geschrieben:String ist deklariert in dieser Art.
dateiname = "cpprec.txt";
Du meinst andersherum? Irgendwie ist dein Beitrag nicht konsistent.Nun suche ich eine einfache Lösung für die Umwandlung von char[256] nach string.
Meine Kristallkugel sagt, du suchst http://www.cplusplus.com/reference/string/string/c_str/
P.S.: 256 Zeichen sind für einen Dateinamen zu wenig. Wieso ist die Länge überhaupt limitiert?
Zuletzt geändert von owl102 am 15.01.2016 11:23:00, insgesamt 1-mal geändert.
Re: C++, Datei mit String als Parameter öffnen
Das ist keine Dekleration sondern eine Zuweisung. Die Dekleration wäre für deine Frage aber vermutlich deutlcih relevanter.mampfi hat geschrieben:String ist deklariert in dieser Art.
dateiname = "cpprec.txt";
mampfi hat geschrieben:Nun suche ich eine einfache Lösung für die Umwandlung von char[256] nach string.
Code: Alles auswählen
char* cstring="abc";
string cppstring(cstring);
rot: Moderator wanne spricht, default: User wanne spricht.
Re: C++, Datei mit String als Parameter öffnen
Wenn dateiname in deinem Beispiel oben ein std::string ist, liefert dir
einen const char * auf das zugrundeliegende Character-Array, siehe http://en.cppreference.com/w/cpp/string ... ring/c_str. (Die Seite bezieht sich auf std::basic_string, aber ein std::string ist nur ein Typedef für std::basic_string<char>.)
Andererseits – der Konstruktor von std::fstream nimmt auf std::strings als Argument: http://en.cppreference.com/w/cpp/io/bas ... ic_fstream, dein Problem liegt wohl an anderer Stelle.
Code: Alles auswählen
dateiname.c_str()
Andererseits – der Konstruktor von std::fstream nimmt auf std::strings als Argument: http://en.cppreference.com/w/cpp/io/bas ... ic_fstream, dein Problem liegt wohl an anderer Stelle.
Manchmal bekannt als Just (another) Terminal Hacker.
-
- Beiträge: 1973
- Registriert: 16.08.2005 18:15:29
- Lizenz eigener Beiträge: GNU General Public License
- Wohnort: münchen
Re: C++, Datei mit String als Parameter öffnen
Also, ich bin in einer Klasse auf das Problem gestoßen.
Und habs hiermit nochmal ausprobiert (includes sind weggelassen).
using namespace std;
void datei_lesen()
{
char dateiname_char[256];
string dateiname_string;
string zeile;
dateiname_string = "datei.txt";
strcpy(dateiname_char, "datei.txt");
cout << "----------- Hier ist datei_lesen()" << endl << endl;
//ifstream textDatei(dateiname_char);
ifstream textDatei(dateiname_string); //Das hier geht nicht
while(textDatei)
{
getline(textDatei, zeile);
cout << zeile << endl;
}
}
/****/
int main()
{
datei_lesen(); cout << "----------------------------------------------------------------------------------" << endl;
}
int main()
{
datei_lesen(); cout << "----------------------------------------------------------------------------------" << endl;
}
Und habs hiermit nochmal ausprobiert (includes sind weggelassen).
using namespace std;
void datei_lesen()
{
char dateiname_char[256];
string dateiname_string;
string zeile;
dateiname_string = "datei.txt";
strcpy(dateiname_char, "datei.txt");
cout << "----------- Hier ist datei_lesen()" << endl << endl;
//ifstream textDatei(dateiname_char);
ifstream textDatei(dateiname_string); //Das hier geht nicht
while(textDatei)
{
getline(textDatei, zeile);
cout << zeile << endl;
}
}
/****/
int main()
{
datei_lesen(); cout << "----------------------------------------------------------------------------------" << endl;
}
int main()
{
datei_lesen(); cout << "----------------------------------------------------------------------------------" << endl;
}
Zuletzt geändert von mampfi am 15.01.2016 13:02:36, insgesamt 2-mal geändert.
Es gibt viele Foren und eine Welt ausserhalb
-
- Beiträge: 1973
- Registriert: 16.08.2005 18:15:29
- Lizenz eigener Beiträge: GNU General Public License
- Wohnort: münchen
Re: C++, Datei mit String als Parameter öffnen
Fehlermeldung und Folgemeldungen bei String:
cpp_zeilen_lesen.cpp: In function ‘void datei_lesen()’:
cpp_zeilen_lesen.cpp:32:40: error: no matching function for call to ‘std::basic_ifstream<char>::basic_ifstream(std::string&)’
ifstream textDatei(dateiname_string); //Das hier geht nicht
^
cpp_zeilen_lesen.cpp:32:40: note: candidates are:
In file included from cpp_zeilen_lesen.cpp:4:0:
/usr/include/c++/4.9/fstream:470:7: note: std::basic_ifstream<_CharT, _Traits>::basic_ifstream(const char*, std::ios_base::openmode) [with _CharT = char; _Traits = std::char_traits<char>; std::ios_base::openmode = std::_Ios_Openmode]
basic_ifstream(const char* __s, ios_base::openmode __mode = ios_base::in)
^
/usr/include/c++/4.9/fstream:470:7: note: no known conversion for argument 1 from ‘std::string {aka std::basic_string<char>}’ to ‘const char*’
/usr/include/c++/4.9/fstream:456:7: note: std::basic_ifstream<_CharT, _Traits>::basic_ifstream() [with _CharT = char; _Traits = std::char_traits<char>]
basic_ifstream() : __istream_type(), _M_filebuf()
^
/usr/include/c++/4.9/fstream:456:7: note: candidate expects 0 arguments, 1 provided
/usr/include/c++/4.9/fstream:430:11: note: std::basic_ifstream<char>::basic_ifstream(const std::basic_ifstream<char>&)
class basic_ifstream : public basic_istream<_CharT, _Traits>
^
/usr/include/c++/4.9/fstream:430:11: note: no known conversion for argument 1 from ‘std::string {aka std::basic_string<char>}’ to ‘const std::basic_ifstream<char>&’
cpp_zeilen_lesen.cpp: In function ‘void datei_lesen()’:
cpp_zeilen_lesen.cpp:32:40: error: no matching function for call to ‘std::basic_ifstream<char>::basic_ifstream(std::string&)’
ifstream textDatei(dateiname_string); //Das hier geht nicht
^
cpp_zeilen_lesen.cpp:32:40: note: candidates are:
In file included from cpp_zeilen_lesen.cpp:4:0:
/usr/include/c++/4.9/fstream:470:7: note: std::basic_ifstream<_CharT, _Traits>::basic_ifstream(const char*, std::ios_base::openmode) [with _CharT = char; _Traits = std::char_traits<char>; std::ios_base::openmode = std::_Ios_Openmode]
basic_ifstream(const char* __s, ios_base::openmode __mode = ios_base::in)
^
/usr/include/c++/4.9/fstream:470:7: note: no known conversion for argument 1 from ‘std::string {aka std::basic_string<char>}’ to ‘const char*’
/usr/include/c++/4.9/fstream:456:7: note: std::basic_ifstream<_CharT, _Traits>::basic_ifstream() [with _CharT = char; _Traits = std::char_traits<char>]
basic_ifstream() : __istream_type(), _M_filebuf()
^
/usr/include/c++/4.9/fstream:456:7: note: candidate expects 0 arguments, 1 provided
/usr/include/c++/4.9/fstream:430:11: note: std::basic_ifstream<char>::basic_ifstream(const std::basic_ifstream<char>&)
class basic_ifstream : public basic_istream<_CharT, _Traits>
^
/usr/include/c++/4.9/fstream:430:11: note: no known conversion for argument 1 from ‘std::string {aka std::basic_string<char>}’ to ‘const std::basic_ifstream<char>&’
Es gibt viele Foren und eine Welt ausserhalb
-
- Beiträge: 1973
- Registriert: 16.08.2005 18:15:29
- Lizenz eigener Beiträge: GNU General Public License
- Wohnort: münchen
Re: C++, Datei mit String als Parameter öffnen
@TomL:
Hat er auch wieder was zu murren, der g++, setze ich Deinen Vorschlag mit meinen Variablen um:
invalid cast from type ‘std::string {aka std::basic_string<char>}’ to type ‘const char*’
dateiname_char = (const char *) dateiname_string
Hat er auch wieder was zu murren, der g++, setze ich Deinen Vorschlag mit meinen Variablen um:
invalid cast from type ‘std::string {aka std::basic_string<char>}’ to type ‘const char*’
dateiname_char = (const char *) dateiname_string
Es gibt viele Foren und eine Welt ausserhalb
Re: C++, Datei mit String als Parameter öffnen
Die Lösung steht doch in viewtopic.php?p=1074330#p1074330 und viewtopic.php?p=1074341#p1074341 :
Code: Alles auswählen
ifstream textDatei(dateiname_string.c_str());
-
- Beiträge: 1973
- Registriert: 16.08.2005 18:15:29
- Lizenz eigener Beiträge: GNU General Public License
- Wohnort: münchen
Re: C++, Datei mit String als Parameter öffnen
Danke, das funktioniert, gleich mal das Testprogramm komplett (einige includes wohl überflüssig):
#include <iostream>
#include <string>
#include <fstream>
#include <iomanip>
#include "stdio.h"
#include "string.h"
using namespace std;
void datei_lesen()
{
char dateiname_char[256];
string dateiname_string;
string zeile;
dateiname_string = "datei.txt";
strcpy(dateiname_char, "datei.txt");
cout << "----------- Hier ist datei_lesen()" << endl << endl;
//ifstream textDatei(dateiname_char);
//ifstream textDatei(dateiname_string); //Das hier geht nicht
ifstream textDatei(dateiname_string.c_str()); //debian-forum owl102
while(textDatei)
{
getline(textDatei, zeile);
cout << zeile << endl;
}
}
int main()
{
datei_lesen(); cout << "----------------------------------------------------------------------------------" << endl;
}
#include <iostream>
#include <string>
#include <fstream>
#include <iomanip>
#include "stdio.h"
#include "string.h"
using namespace std;
void datei_lesen()
{
char dateiname_char[256];
string dateiname_string;
string zeile;
dateiname_string = "datei.txt";
strcpy(dateiname_char, "datei.txt");
cout << "----------- Hier ist datei_lesen()" << endl << endl;
//ifstream textDatei(dateiname_char);
//ifstream textDatei(dateiname_string); //Das hier geht nicht
ifstream textDatei(dateiname_string.c_str()); //debian-forum owl102
while(textDatei)
{
getline(textDatei, zeile);
cout << zeile << endl;
}
}
int main()
{
datei_lesen(); cout << "----------------------------------------------------------------------------------" << endl;
}
Es gibt viele Foren und eine Welt ausserhalb