Witam Obecnie mam program, który pobiera pełną ścieżkę do lokalizacji pliku i jest umieszczany w zmiennej typu: boost :: filesystem2 :: path
Sprawdziłem, jak to zrobić i stwierdziłem, że za pomocą:
string result1 = boost::filesystem::basename (myPath)
przekonwertuje ścieżkę na łańcuch, ALE konwertuje tylko nazwę pliku (np. jeśli ścieżka to „C: \ name \ bobsAwesomeWordDoc.docx”, zwraca po prostu „bobsAwesomeWordDoc”).
Znalazłem następujące informacje, jak przekonwertować całą ścieżkę na ciąg, ale nie wiem, jak zaimplementować to w moim programie. Próbowałem na wiele sposobów, ale otrzymuję błędy konwersji.
const std :: string & string (): Ta funkcja zwraca kopię ciągu, którym została zainicjowana ścieżka, z formatowaniem zgodnym z regułami gramatyki ścieżki.
(znalezione tutaj )
Próbowałem:
string result1 = string& (myPath);
i kilka innych odmian.
u8string()
, ale to nie pomaga, gdystring()
jest używane automatycznie.Wierzę, że trzeba zrobić coś więcej niż tylko przekonwertować ścieżkę do łańcucha - należy najpierw uzyskać kanoniczną wersję ścieżki - ścieżki bezwzględnej bez elementów symboliczno-Link - i przekształcić to w ciąg:
PS - programowałem w Boost od lat i nie mogłem łatwo znaleźć tych informacji w dokumentacji.
Aktualizacja (październik 2017 r.)
Dokumentacja: boost :: filesystem :: canonical .
Ale zauważ, że od C ++ 17 istnieje std :: filesystem , z kanonicznym i dużo więcej.
źródło
canonize
przestarzałe, po drugim łączu, alecanonical
wydaje się , że takie nie jest (na twoje pierwsze łącze, dla 1_48 V3). Teraz w C ++ 17 mamystd::filesystem
oczywiścieTo działało w wxWidgets: (wiem, że powinienem po prostu użyć narzędzi wx, ale jest to test)
źródło
Dzwonienie
myPath.generic_string()
zrobi to, czego potrzebujesz.źródło
Zrób to
path.c_str();
Powinno być dobrze.
źródło