• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Was gibt es Schöneres als den Mai draußen in der Natur mit allen Sinnen zu genießen? Lasst uns teilhaben an Euren Erlebnissen und macht mit beim Thema des Monats Da blüht uns was! ---> Klick

Dateien schreiben und auslesen in XCode (C++)

The_Deathmaster

Zuccalmaglios Renette
Registriert
09.01.10
Beiträge
261
Ich sitz grad in meiner Programmier-Vorlesung, neues Thema: Dateien erstellen/auslesen/etc. in C++ (In Xcode mit dem Command Line Tool, die neueste Xcode Version ist installiert). Der folgende Code funktioniert wie gewünscht auf den Windows-Rechnern, aber nicht mit meinem Xcode:

Code:
[COLOR=#008326]//Einfaches Beispiel für Datei-Ausgabe[/COLOR][COLOR=#7a482f]#include [COLOR=#d62b24]<stdio.h>[/COLOR][/COLOR]
[COLOR=#bf2e9d]int[/COLOR] main()
{
[COLOR=#008326][COLOR=#000000]	[/COLOR]//Jetzt den Datei-Zeiger deklarieren[/COLOR]
	[COLOR=#7340a3]FILE[/COLOR]* in;
[COLOR=#008326][COLOR=#000000]	[/COLOR]//Dateinamen als String festlegen[/COLOR]
[COLOR=#d62b24][COLOR=#000000]	[/COLOR][COLOR=#bf2e9d]char[/COLOR][COLOR=#000000] filename[]=[/COLOR]"Hallo-Input.txt"[COLOR=#000000];[/COLOR][/COLOR]
[COLOR=#008326][COLOR=#000000]	[/COLOR]//Diese Datei öffnen, als "READ-ONLY" Textdatei.[/COLOR]
	in=[COLOR=#3f217c]fopen[/COLOR](filename, [COLOR=#d62b24]"rt"[/COLOR]);
[COLOR=#008326][COLOR=#000000]	[/COLOR]//Prüfen, ob Datei nicht erfolgreich geöffnet wurde[/COLOR]
	[COLOR=#bf2e9d]if[/COLOR](in==[COLOR=#bf2e9d]NULL[/COLOR])
	{
[COLOR=#008326][COLOR=#000000]		[/COLOR]//Fehlermeldung am Screen ausgeben[/COLOR]
[COLOR=#d62b24][COLOR=#000000]		[/COLOR][COLOR=#3f217c]printf[/COLOR][COLOR=#000000]([/COLOR]"\n ERROR! File %s could not be opened!"[COLOR=#000000],filename);[/COLOR][/COLOR]
	}
[COLOR=#008326][COLOR=#000000]	[/COLOR]//Datein zeichenweise einlesen in einer do while Schleife![/COLOR]
    [COLOR=#bf2e9d]char[/COLOR] zeichen;
    [COLOR=#bf2e9d]do[/COLOR] {
[COLOR=#008326][COLOR=#000000]        [/COLOR]//Einzelnes Zeichen aus der Datei lesen[/COLOR]
        zeichen=[COLOR=#3f217c]getc[/COLOR](in);
[COLOR=#008326][COLOR=#000000]        [/COLOR]//Ausgabe dieses Zeichens auf dem Screen[/COLOR]
        [COLOR=#3f217c]printf[/COLOR]([COLOR=#d62b24]"\n%c"[/COLOR],zeichen);
[COLOR=#008326][COLOR=#000000]    } [/COLOR][COLOR=#bf2e9d]while[/COLOR][COLOR=#000000] (zeichen != [/COLOR][COLOR=#7a482f]EOF[/COLOR][COLOR=#000000]); [/COLOR]//solange das gelesene Zeichen KEIN "End of File" ist[/COLOR]
    
[COLOR=#008326][COLOR=#000000]	[/COLOR]//Datei schliessen[/COLOR]
	[COLOR=#3f217c]fclose[/COLOR](in);
[COLOR=#d62b24][COLOR=#000000]	[/COLOR][COLOR=#3f217c]printf[/COLOR][COLOR=#000000]([/COLOR]"\nDatei %s geschlossen"[COLOR=#000000],filename);[/COLOR][/COLOR]
    [COLOR=#bf2e9d]return[/COLOR] [COLOR=#2832cf]0[/COLOR];
}

In der vorhergehenden Aufgabe wurde folgender Code verwendet, bei dessen Ausführung bei mir auch nichts passiert ist (Auch die Datei wurde nicht geschrieben):

Code:
[COLOR=#008326]//ps2800i1.cpp, 2063621,Tenbrink,Jannis[/COLOR][COLOR=#008326]//Einfaches Beispiel für Datei-Ausgabe[/COLOR]
[COLOR=#7a482f]#include [COLOR=#d62b24]<stdio.h>[/COLOR][/COLOR]
[COLOR=#bf2e9d]int[/COLOR] main()
{
[COLOR=#008326][COLOR=#000000]	[/COLOR]//Jetzt den Datei-Zeiger deklarieren[/COLOR]
	FILE* out;
[COLOR=#008326][COLOR=#000000]	[/COLOR]//Dateinamen als String festlegen[/COLOR]
	[COLOR=#bf2e9d]char[/COLOR] filename[]=[COLOR=#d62b24]"hello.txt"[/COLOR];
[COLOR=#008326][COLOR=#000000]	[/COLOR]//Diese Datei öffnen, als "writable" Textdatei.[/COLOR]
	out=fopen(filename, [COLOR=#d62b24]"wt"[/COLOR]);
[COLOR=#008326][COLOR=#000000]	[/COLOR]//Prüfen, ob Datei nicht erfolgreich geöffnet wurde[/COLOR]
	[COLOR=#bf2e9d]if[/COLOR](out==[COLOR=#bf2e9d]NULL[/COLOR])
	{
[COLOR=#008326][COLOR=#000000]		[/COLOR]//Fehlermeldung am Screen ausgeben[/COLOR]
[COLOR=#d62b24][COLOR=#000000]		printf([/COLOR]"\n ERROR! File %s could not be opened!"[COLOR=#000000],filename);[/COLOR][/COLOR]
	}
[COLOR=#008326][COLOR=#000000]	[/COLOR]//Irgend einen Text in die Datei reinschreiben[/COLOR]
[COLOR=#D62B24][COLOR=#000000]	fprintf(out,[/COLOR]"testest"[COLOR=#000000],zahl);[/COLOR][/COLOR]
[COLOR=#008326][COLOR=#000000]	[/COLOR]//Datei schliessen[/COLOR]
	fclose(out);
[COLOR=#bf2e9d][COLOR=#000000]	[/COLOR]return[COLOR=#000000] [/COLOR][COLOR=#2832cf]0[/COLOR][COLOR=#000000];[/COLOR][/COLOR]
	
}

Die Ausgabe sieht auf den Windows Rechnern so aus: testest
Und eine Datei mit dem Namen hello.txt wurde geschrieben und in den Ordner gespeichert, in dem das Programm gespeichert ist.
Für die zweite Aufgabe wurde von Hand eine txt-datei im Ordner erstellt und irgendwas reingeschrieben, ich hab eben versucht eine "Hallo-Input.txt" Datei mit Inhalt testtesttest zu erstellen, hab sie einmal im Ordner mit der xcodeproj-Datei und im Ordner mit der cpp-Datei gespeichert, aber mit dem Versuch ohne eine Datei das Programm auszuführen kam alle drei Male bei Xcode Bildschirmfoto 2012-03-21 um 10.13.37.png .
Kann mir vielleicht bitte jemand korrigieren, was geändert/hinzugefügt werden muss, damit eine Datei geschrieben wird und die Ausgabe aussieht wie verlangt (Also dass beim zweiten Mal der Inhalt der Datei ausgegeben wird, jeder Buchstabe in einer neuen Zeile (->
Code:
//Einzelnes Zeichen aus der Datei lesen        zeichen=getc(in);
        //Ausgabe dieses Zeichens auf dem Screen
        printf("\n%c",zeichen);
    } while (zeichen != EOF); //solange das gelesene Zeichen KEIN "End of File" ist
)?
Da ich nicht der einzige Macuser in der Vorlesung bin danke ich stellvertretend für alle hier für jede Hilfe!
 

Guy.brush

Weißer Winterkalvill
Registriert
15.12.08
Beiträge
3.545
Das sieht mir nach reinem C aus, benutz mal ein Command Line Tool Projekt mit C, nicht mit C++.

Ich hab jetzt nur den ersten Code getestet, der funktioniert damit einwandfrei. Die Inputdatei musst du in den Ordner mit dem Binary packen (meist in meinProjekt/build/Debug/).

PS: Du solltest den Teil mit dem Einlesen in den ELSE Teil deiner IF(in == NULL) Anweisung packen, sonst liest der trotzdem ein, auch wenn die Datei nicht da ist/geöffnet werden kann, und dann schepperts.

EDIT: Sry, Ordnername ausgebessert...
 

The_Deathmaster

Zuccalmaglios Renette
Registriert
09.01.10
Beiträge
261
Es funktioniert super indem ich den gesamten Dateipfad angebe. Und wenn ich doch nur den Dateinamen eingeben will muss es, hab ich jetzt rausgefunden, im current directory sein - doch wo das ist weiß ich nicht... einen Debug Ordner hab ich in meinem Projektordner nicht...