PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C++: Dateiöffnen schlägt fehl und schlägt fehl.


mekakic
2009-09-16, 15:12:29
Ich versuche eine Datei zum Schreiben und eine zum Lesen zu öffnen. Mit dieser einfachen Aufgabe verbringe ich jetzt schon ganz viel Zeit, weil der Vorgang des Öffnens für mich nicht nachvollziebar immer fehlschlägt.

ifstream input_file;
ofstream output_file;

output_file.open("C:\daten.xml", ios::trunc | ios::out ); /* mit den Flags funktioniert es, sonst ist das auch schon viel zu oft fehlgeschlagen */
if( output_file.good() ) /* is_open() */
{
cout << "juhu" << endl;
}

input_file.open("C:\test.xml");
if( input_file.is_open() )
{
cout << "juhu" << endl;
}

Aber letzteres will einfach nicht funktionieren. Eine ganz einfach Text-Datei die mit Inhalt an dem Ort existiert soll einfach zum Lesen geöffnet werden. Aber er läuft nie, nie, nie in den is_open() oder good() Zweig bei der input_file rein. Ich habe nicht die geringste Ahnung wieso.

Habe sogar der Datei Zugriffsrechte für absolut jeden gegeben, aber das schlägt immer fehl. :(

Weiß jemand was falsch läuft? DANKE

Ganon
2009-09-16, 15:23:03
Muss das nicht "C:\\daten.xml" heißen?

mekakic
2009-09-16, 15:34:34
http://i201.photobucket.com/albums/aa52/lolercoptor/fuuu.png

mekakic
2009-09-16, 15:53:53
Muss das nicht "C:\\daten.xml" heißen?Wobei, warum funktioniert das bei der Output Datei. Die wird korrekt angelegt? Mit:

output_file.open("C:\daten.xml", ios::trunc | ios::out );

Letzteres funktioniert nur mit:
input_file.open("C:\\test.xml");

Warum macht das einen Unterschied? Und wie ist das wenn ich Daten über die Kommandozeile eingebe? Müßte ich mich da selber um den "\\" kümmern?

Ganon
2009-09-16, 16:01:54
Das weiß ich nicht, warum das eine geht und das andere nicht. Ich weiß nur, dass "\" im Quelltext ein eigentliches Codezeichen markiert. Also wenn du z.B. einen String aus 30" Bildschirm machen willst, musst du "30\" Bildschirm" schreiben. Darum auch "\\", wenn du ein \ darstellen willst.

Über die Kommandozeile ist das nicht nötig, weil das ja kein Quellcode mehr ist, sondern zur Laufzeit kommt.

godess
2009-09-16, 16:19:49
Ersteres funzt, weil '\d' (bei "C:\daten") *nichts* bedeutet. '\t' (bei "C:\test") im zweiten ist aber ein Tab (so wie \n (bzw, \r\n auf Windows) ein Zeilenende).

Siehe: http://de.wikipedia.org/wiki/Steuerzeichen

Dort wird auch klar warum man '\\' machen muss. Da '\<irgendwas>' ein Steuerzeichen ist, muss das '\' markiert werden um es "drucken" zu können. Das gent mit einem zweiten '\', denn '\\' wird zu "\" (das nennt man escapen).

Ganon
2009-09-16, 16:24:44
Stimmt, dass das Zweite \test heißt, habe ich übersehen :D

mekakic
2009-09-16, 16:29:20
Damit habe ich heute einen ganzen Tag verbracht. :freak:

Ganon
2009-09-16, 16:44:48
Mit was programmierst du denn? Ich programmiere zur Zeit mehr in Java unter NetBeans und da wird mir so etwas farblich hervorgehoben. Dort wäre dann \d fett gedruckt und "aten.xml" wieder normal. Nur so als Tipp, da NetBeans ja auch C++ unterstützt. Weiß aber nicht inwieweit sich das mit Windows verträgt :D

The_Invisible
2009-09-16, 17:14:57
ach, lustig wirds ja erst bei regulären ausdrücken :D

mfg

Gast
2009-09-16, 17:58:32
müsste nicht auch

input_file.open("C:/test.xml");
gehen? Mit / statt \?

Pinoccio
2009-09-16, 18:05:54
Damit habe ich heute einen ganzen Tag verbracht. :freak:Falls es dich tröstet: das ist wohl den meisten schonmal passiert. ;-)

mfg

Monger
2009-09-16, 20:28:17
Ich weiß, dass es in C# ne Syntax gibt um Steuerzeichen zu escapen. Dort stellt man dem String afaik ein Dollarzeichen voran: $"C:\test.xml".

Vielleicht gibt es in C++ was ähnliches!?

Coda
2009-09-16, 20:35:32
Nope. Man muss sie immer inline escapen. \ ist dann eben \\ und " wird zu \" Das gleiche gilt auch für Newline \n und Tabs \t

Der einzige String-Präfix ist L was dann für einen wide-character, also Unicode-String steht.

müsste nicht auch

input_file.open("C:/test.xml");
gehen? Mit / statt \?
Zumindest unter NT ist das kein Problem. Und Win 9x sollte wohl keiner mehr verwenden ;)

xxxgamerxxx
2009-09-16, 22:19:53
Ich weiß, dass es in C# ne Syntax gibt um Steuerzeichen zu escapen. Dort stellt man dem String afaik ein Dollarzeichen voran: $"C:\test.xml".


Ne, es ist kein "$", sondern ein "@". Also -> @"c:\datei.txt"

godess
2009-09-17, 02:52:30
Mit was programmierst du denn? Ich programmiere zur Zeit mehr in Java unter NetBeans

Ugh...Java...Ugh...NetBeans.

Man man man, kommt doch mal wieder zu Sinnen! :D

ScottManDeath
2009-09-17, 06:38:23
C++0x unterstuetzt raw strings ohne Escapes: R"[\I\can\has\back\slash]" Siehe http://en.wikipedia.org/wiki/C%2B%2B0x#New_string_literals

Bei C# ist es @"\I\can\has\back\slash"

MuLuNGuS
2009-09-17, 09:01:44
um nocheinmal für C# zusammenzufassen,

es geht beides:



Console.WriteLine("gibbackslash \\ ");
Console.WriteLine(@"gibbackslash \ ");