Gibt es ein C ++ - Äquivalent zu getcwd?
Sehe ich C getcwd über:
Mann 3 cwd
Vermute ich, dass C++ hat eine ähnliche,, die zurückkehren könnte mir einen std::string .
Wenn ja, wie heißt es und wo finde ich es in der Dokumentation?
Dank!
InformationsquelleAutor der Frage anon | 2010-02-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ok, ich bin zu beantworten, obwohl Sie bereits angenommen haben, eine Antwort.
Einen noch besseren Weg, als zu wickeln die getcwd nennen wäre, die Nutzung boost::filesystemwo Sie eine
path
Objekt aus dercurrent_path()
Funktion. Der Boost-filesystem-library ermöglicht es Ihnen zu tun, viele andere nützliche Dinge, die Sie sonst tun müssen, um eine Menge von string-parsing zu tun, wie die überprüfung, ob Dateien/Verzeichnisse vorhanden sind, bekommen Eltern Weg, machen Pfade, vollständige etcetera. Check it out, es ist tragbar als auch - was viel die string-parsing-code würde man sonst verwenden, wird wahrscheinlich nicht sein.Update (2016): - Dateisystem veröffentlicht wurde, als technische Spezifikation im Jahr 2015, basierend auf der Boost-Filesystem-v3. Dies bedeutet, dass es möglicherweise verfügbar, die mit Ihrem compiler (zum Beispiel Visual Studio 2015). Mir scheint es auch wahrscheinlich, dass Sie Teil eines künftigen C++ - standard (ich würde annehmen, C++17, aber ich bin mir nicht bewusst den aktuellen status).
Update (2017): Die Dateisystem-Bibliothek zusammengeführt wurde mit ISO C++ in C++17, für
InformationsquelleAutor der Antwort villintehaspam
std::string
's Konstruktor kann sicher einenchar*
als parameter. Überraschenderweise gibt es eine windows-version zu.Edit: eigentlich ist es ein wenig komplizierter:
Speicher ist kein problem-temp ist ein stack-basierter buffer, und die std::string Konstruktor muss eine Kopie. Wahrscheinlich könnte man es machen, aber ich glaube nicht, dass der standard würde garantieren, dass.
Speicherzuweisung, die über POSIX:
InformationsquelleAutor der Antwort Kornel Kisielewicz
Lassen Sie uns versuchen, und schreiben Sie dieses einfache C-Aufruf als C++:
Die Sache ist, wenn die Verpackung einer Bibliothek-Funktion in eine andere Funktion, die Sie müssen davon ausgehen, dass alle Funktionen, die verfügbar gemacht werden sollten, weil eine Bibliothek nicht weiß, was sein wird, ruft es. Also, Sie haben, um den Fehler zu behandeln Fällen eher als nur das schlucken oder hoffen, dass Sie nicht passieren wird.
Ist es meist besser, lassen Sie den client-code, rufen Sie die library-Funktion, und befassen sich mit der Fehler an diesem Punkt - der client-code wahrscheinlich egal ist warum der Fehler aufgetreten ist, und so nur behandeln die pass/fail-Fall, anstelle der Fehler-codes.
InformationsquelleAutor der Antwort Pete Kirkham
Müssen Sie einfach nur ein bisschen schreiben wrapper.
InformationsquelleAutor der Antwort Brian Gianforcaro
Alle C-Funktionen sind auch in C++ Funktionen. Wenn Sie eine
std::string
erstellen Sie einfach eine aus derchar*
dass getcwd wird für Sie.InformationsquelleAutor der Antwort Rob Kennedy
Ich verwendet
getcwd()
in C in der folgenden Weise:Header-Datei benötigt, ist
stdio.h
.Wenn ich mit C-compiler, es funktioniert perfekt.
Wenn ich kompilieren genau den gleichen code mit C++ - compiler meldet den folgenden Fehlermeldung:
Dann habe ich
unistd.h
und kompiliert mit C++ - compiler.Dieses mal funktioniert alles.
Als ich wieder eingeschaltet, um den C-compiler, es funktioniert immer noch!
Solange Sie beide
stdio.h
undunistd.h
der obige code funktioniert, für C-UND C++ - Compiler.InformationsquelleAutor der Antwort Zhongming Qu
Ich auch boost::filesystem wie bereits in einer anderen Antwort oben. Ich wollte nur hinzufügen, dass seit der current_path() Funktion nicht zurück, wird ein std::string ist, müssen Sie es konvertieren.
Hier ist was ich getan habe:
InformationsquelleAutor der Antwort crecre
Könnte man erstellen Sie eine neue Funktion, die würde ich am Liebsten über die Verlinkung einer Bibliothek wie boost(sofern Sie nicht bereits sind).
InformationsquelleAutor der Antwort Cody Serino