Werte in Dateien speichern und wieder auslesen

Crackmaster

Mitglied
Hi Leute,
ich versuche grade Werte von Variablen in Dateien zu speichern und diese Werte
dann wieder auszulesen.
Das klappt bei mir nicht.

2 Freagen:
=========

- Welche Bibliothek brauche ich dafür ?
- welcher Befehl ist für diese Aktionen zuständig?
 
Zuletzt bearbeitet:
Was brauchst du: die Bibliothek: io_base -> fstream.h
Wie machst du das:
Code:
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
int laenge;
char * puffer;
ifstream is;

is.open ("meine-datei-in-der-die-strings-sind.endung", ios::binary ); // Datei oeffnen
is.seekg (0, ios::end); // Laenge der Datei bekommen
laenge = is.tellg();
is.seekg (0, ios::beg);
puffer = new char [laenge];
is.read (puffer,laenge); // Inhalt der Datei auslesen
is.close();

// hier kommt das, was ich mit dem "puffer" (Inhalt der Datei) anstellen will
// zum Beispiel an der Console anzeigen:
cout.write (puffer, laenge);

delete puffer[]; // und hier loeschen wir ihn wieder aus dem Arbeitsspeicher
return 0;
}

// edit:
Reinschreiben:
Code:
ofstream file("meine-datei-in-der-die-strings-sind.endung");
file << "zeile 1 in der Datei" << endl;
file << "zeile 2 in der Datei dank \"endl\" " << endl;

habe was vergessen und hinzugefügt
 
Zuletzt bearbeitet:
Hallo,
du musst erstmal die bibliothek <fstream> einbinden.
Dann erzeugst du ein fstream objekt (oder ein ifstream objekt für reine Eingabe bzw. ofstream
zur Ausgabe)
Hier ein Beispielprogramm:

Code:
#include<iostream>
#include<fstream>

using namespace std;

int main()
{
	int max;
	string eingabe;
	fstream datei;		//Hier wird ein fstream objekt "datei" erzeugt.
	datei.open("test.txt", ios::out);	//Hier wird die Datei test.txt geöffnet/angelegt.
	cout<<"Wie viele Zeilen Text möchten Sie eingeben? "<<flush;
	cin>>max;
	fflush(stdin);
	for(int i=0; i<max; i++)
	{
		cout<<"Bitte geben Sie Zeile "<<i+1<<" ein:"<<endl;
		getline(cin, eingabe);
		datei<<eingabe<<endl;	//Hier wird die Eingabe in die Datei geschrieben
		fflush(stdin);
	}
	datei.close();

	/*Soweit die Datei-Eingabe. Nun folgt das Auslesen einer Datei:*/

	datei.open("test.txt", ios::in);
	string gelesen;
	cout<<"Wie viele Zeilen wollen Sie auslesen? "<<flush;
	cin>>max;
	for(int j=0; j<max; j++)
	{
		getline(datei, gelesen);
		cout<<gelesen<<endl;
		fflush(stdin);
	}
	datei.close();
}
Gruß
bastionmancher

//edit
Wenn du eine bestimmte Anzahl Variablen hast (z.B. x, y und z), dann liest du die Datei am besten in ein Array ein (die Größe ist ja bekannt, da du die Anzahl der Variablen kennst) und weist dann eine Zeile in dem Array einer Variablen zu!
 
Zuletzt bearbeitet:
beim kompelieren kommt bei mir immer der fehler das GETLINE() nicht definiert ist!
in welcher bibliothek ist dieser befehl?
 
@deepthroat: Bist du dir sicher, dass es nicht reicht <iostream> einzubinden? Bei mir klappt das irgendweshalb... Kann aber auch sein, dass ich mich jetzt vertue...
 
Ok das klappt jetzt !
Aber probleme habe ich wenn ich INT ; SHORT ; oder BOOL -werte laden will,
wie geht das denn?
 
Zuletzt bearbeitet:
@deepthroat: Bist du dir sicher, dass es nicht reicht <iostream> einzubinden? Bei mir klappt das irgendweshalb... Kann aber auch sein, dass ich mich jetzt vertue...
Das kommt ganz drauf an, ob im iostream Header bereits der string Header eingebunden wird oder nicht. Bei der libstdc++ von GCC ist das der Fall, bei der Visual C++ Standardbibliothek aber nicht.

Gruß
 
Ok das klappt jetzt !
Aber probleme habe ich wenn ich INT ; SHORT ; oder BOOL -werte laden will,
wie geht das denn?
Für eine formatierte Ein- bzw. Ausgabe nutzt man in C++ die << bzw. >> Operatoren.

Bsp:
C++:
int i;
bool b;

if (datei >> i) {
  // int konnte gelesen werden.
} else {
  // Fehler
}

if (datei >> b) {
  // bool konnte gelesen werden
} else {
  // Fehler
}
Gruß
 
Hi,
ich habe doch noch eine Frage.
Und zwar:

wie kann ich einen Namen in eine Datei schreiben und dann wieder auslesen.
mit char nicht string.

Das bekomme ich nicht richtig hin.

Mit freundlichen Grüßen ....
 
Zurück