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
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!?
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 \ ");
vBulletin®, Copyright ©2000-2024, Jelsoft Enterprises Ltd.