C++ #ofstream.open() mit einem Enviromentpfad nutzen. Slash vs. Backslash?

Y0DA92

Lt. Junior Grade
Registriert
Juni 2007
Beiträge
481
Guten Abend!
Folgendes Problem: Möchte in meinem "Temp"-Verzeichnis eine Datei per ofstream erstellen. Ich glaube, aber mein Typecasting von einem String zu einem char * bringt ihn leicht durcheinander was die Slash und Backslash Nutzung angeht.
"cout" gibt den Pfad mit einem Backslash an also (C:\User\...), wenn ich den Pfad per Hand bei open() mit einem Slash eingebe (C:/User/lawl/...) funktioniert das Erstellen super. Bevor ich nun alle Backslashes durch Normale ersetze wollte ich lieber mal nachfragen, ob es eine elegantere Methode gibt, die ich bis jetzt noch nicht gefunden habe...

Code:
string tempPath = getenv ("TEMP");
string Name = "\\test.txt";

ofstream datei;
cout << (tempPath+Name) << endl;

datei.open((char *)((tempPath+Name).c_str()), ios_base::binary | ios_base::trunc | ios_base::out);

Danke schon mal für eure Antworten...
Ergänzung ()

Kann geschlossen werden! -.-
Es funktioniert. Ich habe einfach nur im falschen Tempordner geguckt.
Tut mit leid.
 
Zuletzt bearbeitet: (Rechtschreibfehler)
Code:
datei.open((char *)((tempPath+Name).c_str()), ios_base::binary | ios_base::trunc | ios_base::out);

Trotzdem solltest du mal drüber nachdenken, ob der cast, den du da vornimmst, überhaupt nötig ist. ;)

std:: ofstream (erwartet an dieser Stelle einen const char*. Zufälligerweise gibt std::string::c_str() genau einen solchen zurück. Das const da wegzucasten (und dann auch noch mit einem C-style cast ... ts ts ts ;)) ist also völlig überflüssig.
 
Ok das ergibt Sinn, danke.
Meinst du mit C-Style Cast sowas wie: (int) bla oder (char *) temp ??
Benutzt man bei C++ üblicherweise die entsprechenden Methoden? Und warum ist das besser?
 
In C++ wurden zum Casten 4 Operatoren eingeführt, von denen jeder nur eine Aufgabe hat, während der C-Style Cast so eine Art Vorschlaghammer ist, der gnadenlos nahezu jeden Cast durchführt. Die C++-Castoperatoren regen zumindest dazu an, sich erst mal Gedanken zu machen, was genau man mit dem Cast eigentlich erreichen möchte.

Obendrein kannst du nach static_cast, const_cast, reinterpret_cast und dynamic_cast auch viel leichter im Code suchen.

Außerdem sind sie auch einfacher sicherer, besonders im Angesicht von schwerem Refactoring (also dem Umschreiben von bestehendem Code). Hier kann es z.B. mal passieren, daß sich die in einem Cast beteiligten Typen ändern (vielleicht wurde ein typedef geändert oder eine Vererbungshierarchy modifiziert) und der alte C-style cast weiterhin schweigsam seine Arbeit tut, aber vielleicht nun mit einem völlig anderen und ungewollten Ergebnis ... während der passende C++ cast Operator gemeckert hätte, daß ihm da was nicht paßt und du so auf den Fehler aufmerksam geworden wärst.
 
Zuletzt bearbeitet:
Zurück
Oben