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.2 Die Funktionen fscanf() und fprintf()

13.2.2 Die Funktionen fscanf() und fprintf()

Wie Sie sich vielleicht denken könnt, stehen die Funktionen für "File-ScanF" und "File-PrintF". Sie funktionieren wie die bekannten Funktionen "scanf" und "printf", nur mit dem Unterschied, dass man beim Aufruf noch das Datei-Handle mit übergibt und die Ein - bzw. Ausgabe, nichts mit der Konsole, sondern mit Dateien zu tun hat.

Im folgenden Beispiel, werde ich eine Textdatei öffnen, den Inhalt Stück für Stück auslesen und ihn in eine andere Datei schreiben. Damit wird ein (langsames) Kopieren einer Datei, realisiert.

 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
26
27
28
29
30
31
					
char*	pcstrFileNameSrc	= "C:\\Testdatei_Quelle.txt";
char*	pcstrFileNameDst	= "C:\\Testdatei_Ziel.txt";

FILE*	hFileSrc		= fopen(pcstrFileNameSrc, "r");
FILE*	hFileDst		= fopen(pcstrFileNameDst, "w+");

// Wenn die Dateien geöffnet werden konnten
if (hFileSrc != NULL) {
	if (hFileDst != NULL) {
		try {
			char astrTemp[100];
			bool bCouldRead	= true;

			// Solange das Dateiende noch nicht erreicht ist
			while (bCouldRead) {
				fscanf(hFileSrc, "%s", astrTemp);

				// Wenn das Einlesen funktioniert hat
				if (bCouldRead = !feof(hFileSrc)) {
					fprintf(hFileDst, "%s ", astrTemp);
				} // end of if
			} // end of while
		} catch (...) {
			printf("Es ist ein Fehler aufgetreten!\n");
		} // end of try
	
		fclose(hFileSrc);
	} // end of if

	fclose(hFileDst);
} // end of if
					

Genauso wie man das von der Funktion "scanf" kennt, kann man auch Integer und andere Typen, gezielt einlesen. Allerdings muss man dann darauf gefasst sein, dass der gelesene Inhalt nicht dem entspricht, was man erwartet (jemand könnte die Datei manipuliert haben). Deshalb ist es stets am klügsten, erst einmal Strings einzulesen und jene, nach entsprechender Prüfung, in das gewünschte Format zu Konvertieren. Wie Sie in Zeile 19 sehen, prüfe ich vor dem Schreiben, ob das Einlesen funktioniert hat. Würde ich dies nicht tun, würde in der Zieldatei, der letzte Eintrag der Quelldatei doppelt vorkommen, da "fscanf" im Fehlerfall die übergebene Variable für den Inhalt, nicht anfasst und somit noch der letzte Wert drin steht.

Alternativ, stehen auch die sicheren Funktionen "fscanf_s" und "fprintf_s" zur Verfügung, mit welchen Sie besser auf evtl. auftretende Fehler reagieren können. Mehr zu diesen Funktionen findet Sie in der Hilfe oder im MSDN.

Zum Seitenanfang
Zum Inhaltsverzeichnis

© Copyright by Thomas Weiß, 2009 - 2012