Textdatei auslesen und in String speichern

B

blong1550

Hallo,

ich habe folgende Aufgabe bekommen.

string readFile (string filename): Diese Funktion liest die Datei vom Namen
filename ein, speichert den Inhalt als String ab und gibt diesen zur¨uck.

vorgegeben haben wir eine text.txt.

Meine Funktion sind bisher so aus:

Code:
string readFile (string filename)
{
	string inhalt;
	ifstream quelle;
	quelle.open(filename.c_str());
		if (!quelle)
		{
			cerr << filename << " kann nicht geöffnet werden!\n";
			exit(-1);
		}


		char ch;
		while (quelle.get(ch))
		{
			cout << ch;

		}

Das Problem ist, es funktioniert bei der langen Textdatei nicht mehr und außerdem speichert er es ja nicht in einem String.
Nun tue ich mich etwas schwer und weiß nicht wie ich die komplette textdatei als string speichere?


Grüße
 
Vllt. führen zu große Textdateien zu einem Pufferüberlauf?

Du kannst auch gleich den ganzen Inhalt lesen mit dem Operater >>:

Code:
ifstream f('text.txt');
string S;
f >> S;

Habe jetzt ohne Fehler-Überprüfung gemacht. Müsste aber klappen!
 
mh ne das funktioniert nicht

initializing argument 1 of `std::basic_ifstream<_CharT, _Traits>::basic_ifstream(const char*, std::_Ios_Openmode) [with _CharT = char, _Traits = std::char_traits<char>]'
invalid conversion from `int' to `const char*'


Keine Ahnung was da lost ist.
 
habs jetzt selbst geschafft. ich weiß nicht ob es nicht noch kürzer geht aber so geht es wenigstens -.-

Code:
string readFile (string filename)
{
	string zeile,inhalt ;
	ifstream quelle;
	quelle.open(filename.c_str());
	if (!quelle)
	{
		cerr << filename << " kann nicht geöffnet werden!\n";
		exit(-1);
	}

	while (!quelle.eof())
	{
		getline(quelle,zeile);
		inhalt = inhalt + zeile;
	}

	return inhalt;

}
 
Hi.
Vllt. führen zu große Textdateien zu einem Pufferüberlauf?

Du kannst auch gleich den ganzen Inhalt lesen mit dem Operater >>:
Der >> Operator liest aber nur ein Wort ein (also bis zum nächsten Leerzeichen).
mh ne das funktioniert nicht

initializing argument 1 of `std::basic_ifstream<_CharT, _Traits>::basic_ifstream(const char*, std::_Ios_Openmode) [with _CharT = char, _Traits = std::char_traits<char>]'
invalid conversion from `int' to `const char*'

Keine Ahnung was da lost ist.
ComFreek hat fälschlicherweise statt doppelten Anführungszeichen einfache Anführungszeichen verwendet.

Um eine Datei komplett einzulesen:
C++:
string readFile (const string& filename)
{
  ifstream quelle(filename.c_str());
 
  if (quelle.is_open()) {
    stringbuf buffer;
    
    if (quelle >> &buffer) {
      return buffer.str();
    } else {
      // I/O Fehler
    }
  } else {
    // Datei existiert nicht oder kein Zugriff möglich
  }
}
Gruß
 
Zurück