Twitter und Facebook-Anbindung
X
Tweet Follow @twitterapi
!!! Anbindung an twitter und facebook öffnen !!!

Wenn Ihnen mein Online-Buch gefällt,
dann bedanken Sie sich doch mit einer kleinen Spende...

13.2.4 Testdateien mit Streams

13.2.4 Testdateien mit Streams

Eine elegantere Variante mit Dateien zu arbeiten, sind die Dateistreams. Sie nehmen Ihnen ein wenig Arbeit ab, da sie selbst Objekte sind, die viele Dinge kapseln, also im Hintergrund ausführen, um die Sie sich nicht mehr kümmern müssen. Eigentlich ist dieses Kapitel an der falschen Stelle, da ich Objekte erst im nächsten großen Abschnitt bespreche, aber auf der anderen Seite, gehört es der Vollständigkeit halber, hier her und bietet zudem eine schöne Einleitung zum Thema objektorientierte Programmierung.

Im folgenden Quelltext werde ich genau das gleiche machen, wie eben, also eine Textdatei händisch kopieren, nur dass ich jetzt Dateistreams benutzen werde. Nebenbei sei noch erwähnt, dass ich dafür die Header-Datei "fstream" benutze.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
					
char*		pcstrFileNameSrc	= "C:\\Testdatei_Quelle.txt";
char*		pcstrFileNameDst	= "C:\\Testdatei_Ziel.txt";

std::ifstream	oSrcFileStream(pcstrFileNameSrc);
std::ofstream	oDstFileStream(pcstrFileNameDst);

// Wenn die Dateien ge�ffnet werden konnten
if (oSrcFileStream.is_open() && oDstFileStream.is_open()) {
	try {
		char cValue;
		bool bCouldRead		= true;

		// Solange gelesen werden kann
		while (bCouldRead) {
			oSrcFileStream >> cValue;
		
			// Wenn das Einlesen funktioniert hat
			if (bCouldRead = !oSrcFileStream.eof()) {
				oDstFileStream << cValue;
			} // end of if
		} // end of while
	} catch (...) {
		printf("Es ist ein Fehler aufgetreten!\n");
	} // end of try
} // end of if
					

In Zeile 4 und 5 sehen Sie, dass bereits das öffnen einer Datei mit Streams, anders aussieht. Dies liegt daran, dass man die Datei nicht selbst öffnet, sondern dies der Kontrolle der Objekte überlässt. In den beiden Zeilen werden also lediglich zwei Streamobjekte erzeugt und es wird ihnen mitgeteilt, welche Dateien sie benutzen sollen. Normalerweise muss man auch hier noch einen Modus mit angeben, allerdings gibt es für jene Parameter entsprechende Defaultwerte, welche genau so definiert sind, wie ich sie brauche, um in Textdateien zu lesen, bzw. zu schreiben.

Einen weiteren Unterschied zu eben sehen Sie in Zeile 8. Vorhin habe ich getrennt geprüft, ob die Dateien geöffnet werden konnten, damit ich sie auch nur in diesem Fall schließe. Auch hier kommen Ihnen die Streamobjekte entgegen. Da sie, wie erwähnt, den kompletten Dateizugriff Kapseln (auch das Schließen der Dateien), brauche ich keine getrennten Prüfungen und spare mir damit ein paar Zeilen Quelltext.

In Zeile 15 wird nun aus der Datei bzw. aus dem Stream, Zeichenweise gelesen. Entsprechend ähnlich verhält sich die Sache in Zeile 19, nur mit dem Unterschied, dass hier das Schreiben in die Datei realisiert wird.

Leider sind Streams keine Allzweckwaffe. Zum einen muss man trotzdem immer prüfen, ob das Einlesen funktioniert hat und zum anderen sieht das Ergebnis, also die Zieldatei, nicht so aus wie gewünscht. Es fehlen wieder sämtliche Leerzeichen und auch alle Zeilenumbrüche. Wie man dies beheben kann, sehen Sie dann, wenn ich zeige, wie man Binärdateien mit Streams bearbeitet. Abschließend sei nochmals erwähnt, dass man die Dateien nicht wieder freigeben braucht, da dies geschieht, sobald man den Gültigkeitsbereich der Objekte verlässt und sie im Zuge dessen, freigegeben werden (es passiert im Destruktor der Streams).

Zum Seitenanfang
Zum Inhaltsverzeichnis

© Copyright by Thomas Weiß, 2009 - 2012