wake-up-neo.net

Wie konvertiert man den Boost-Pfad-Typ in einen String?

Hallo, ich habe derzeit ein Programm, das den vollständigen Pfad des Dateispeichers abruft und in einer Variablen abgelegt wird, die vom Typ ist: boost :: filesystem2 :: path 

Ich habe nachgesehen, wie das geht und habe folgendes gefunden:

string result1 = boost::filesystem::basename (myPath)

wandelt den Pfad in eine Zeichenfolge um, aber es konvertiert nur den Dateinamen (wenn der Pfad beispielsweise "C:\name\bobsAwesomeWordDoc.docx" lautet), wird nur "bobsAwesomeWordDoc" zurückgegeben.

Ich habe Folgendes gefunden, wie der gesamte Pfad in eine Zeichenfolge konvertiert werden kann Aber ich weiß nicht, wie ich ihn in meinem Programm implementieren soll. Ich habe mehrere Möglichkeiten ausprobiert, bekomme aber Konvertierungsfehler.

const std :: string & string (): Diese Routine gibt eine Kopie der Zeichenfolge zurück, mit der der Pfad initialisiert wurde. Die Formatierung erfolgt nach den Regeln der Pfadgrammatik.

(gefunden hier )

Ich habe versucht:

string result1 = string& (myPath);

und ein paar andere Variationen.

115
Johnston

Sie müssen nur myPath.string() aufrufen.

138
icecrime

Ich glaube, Sie müssen etwas mehr tun, als nur den Pfad in eine Zeichenfolge umzuwandeln - Sie sollten zuerst die kanonische Version des Pfads - einen absoluten Pfad ohne symbolische Verknüpfungselemente - erhalten und das in eine Zeichenfolge:

boost::filesystem::canonical(myPath).string();

P.S. - Ich programmiere schon seit Ewigkeiten mit Boost und konnte diese Informationen nicht leicht in den Dokumenten finden.


Update (Okt 2017) 

Dokumentation: boost :: filesystem :: canonical

Beachten Sie jedoch, dass es ab C++ 17 std :: filesystem gibt, mit canonical und vieles mehr.

10
resigned

Dies funktionierte in wxWidgets: (Ich weiß, ich sollte nur die WX-Dienstprogramme verwenden.

void WxWidgetsBoostTestFrame::OnTestBtnClick(wxCommandEvent& event)
{
    boost::filesystem::path currentPath;
    currentPath = boost::filesystem::current_path();
    std::string curDirString;
    curDirString = boost::filesystem::canonical(currentPath).string();
    wxString mystring(curDirString.c_str(), wxConvUTF8);
    wxMessageBox(mystring); // output:  C:/Users\client\Desktop...      
}
3
Paddy

Der Aufruf von myPath.generic_string() wird das tun, was Sie brauchen.

1
J.Adler

Mach das

path.c_str();

Du solltest in Ordnung sein.

0
Calorified