Halo Saya saat ini memiliki program yang mendapat path lengkap dari lokasi file dan dimasukkan ke dalam variabel yang merupakan tipe: boost :: filesystem2 :: path
Saya telah mencari cara untuk melakukan ini dan menemukan bahwa menggunakan:
string result1 = boost::filesystem::basename (myPath)
akan mengubah jalur menjadi string TETAPI itu hanya mengubah nama file (mis. jika pathnya adalah "C: \ name \ bobsAwesomeWordDoc.docx" itu hanya mengembalikan "bobsAwesomeWordDoc").
Saya telah menemukan yang berikut tentang cara mengonversi seluruh jalur menjadi string, tetapi saya tidak tahu bagaimana cara mengimplementasikannya di program saya. Saya telah mencoba beberapa cara tetapi saya mendapatkan kesalahan konversi.
const std :: string & string (): Rutin ini mengembalikan salinan string yang jalurnya diinisialisasi, dengan pemformatan per aturan tata bahasa jalur.
(ditemukan di sini )
Saya telah mencoba:
string result1 = string& (myPath);
dan beberapa variasi lainnya.
u8string()
, tetapi itu tidak membantu di manastring()
digunakan secara otomatis.Saya percaya Anda perlu melakukan sedikit lebih dari sekedar mengkonversi jalan ke string - pertama Anda harus mendapatkan versi kanonik jalan - path absolut tanpa unsur simbolik-link - dan mengkonversi yang ke dalam string:
PS - Saya sudah pemrograman dengan Boost sejak lama dan saya tidak bisa dengan mudah menemukan info ini di dokumen.
Pembaruan (Okt 2017)
Dokumentasi: boost :: filesystem :: canonical .
Tetapi perhatikan bahwa pada C ++ 17 ada std :: filesystem , dengan kanonik dan banyak lagi.
sumber
canonize
yang sudah usang, per tautan kedua Anda, tetapicanonical
tampaknya tidak (per tautan pertama Anda, untuk 1_48 V3). Sekarang di C ++ 17 kitastd::filesystem
tentu sajaIni bekerja di wxWidgets: (Saya tahu saya harus menggunakan utilitas wx tetapi itu adalah ujian)
sumber
Memanggil
myPath.generic_string()
akan melakukan apa yang Anda butuhkan.sumber
Melakukan hal ini
path.c_str();
Kamu harus baik-baik saja
sumber