2011-12-05 17 views
14

Czy istnieje sposób na uzyskanie znaku separatora ścieżki platformy za pomocą Boost.Filesystem? Przez separator ścieżek mam na myśli / dla systemu Unix i \ dla systemu Windows.Uzyskiwanie separatora ścieżki platformy za pomocą Boost.Filesystem

Już wiem, że mogę użyć boost::filesystem::path::operator/ do połączenia dwóch ścieżek z odpowiednim znakiem separatora. Ale chcę tylko / lub \.

Wiem również, że mogę używać #ifdef _WIN32, ale wolałbym, aby Boost.Filesystem powiedział mi odpowiedni znak separatora.

EDYTOWANIE: Chcę użyć version 3 z Boost.Filesystem API, jak używane w Boost 1.48.

+0

D'oh! Szukałem API, które bezpośrednio dałoby mi separator ścieżek i nie myślałem o używaniu po prostu: 'boost :: filesystem :: path ("/"). Native()' –

+0

Czy ktoś może potwierdzić, że 'boost: : filesystem :: path ("/"). native() 'zwraca' "\\" 'w systemie Windows? –

+3

Tak, więc wiesz, system Windows akceptuje '/' jako separator pafh. – Xeo

Odpowiedz

8

W wersji 1.57, zwiększenia teraz ma lepsze rozwiązanie, to jest po prostu stałą char/wchar_t (w zależności od różnych platformach) boost::filesystem::path::preferred_separator.

Przeczytaj http://www.boost.org/doc/libs/release/libs/filesystem/doc/reference.html#Operating-system-examples, aby uzyskać więcej informacji. Jest w nim jeszcze więcej funkcji zależnych od systemu.

Prosty przykład:

#include <boost/filesystem.hpp> 
#include <iostream> 

int main() { 
    std::cout << boost::filesystem::path::preferred_separator << std::endl; 
} 
+0

Szybki przegląd źródła boost pokazuje, że boost używa tylko ifdef, aby uzyskać separator podczas etapu preprocesora. W tym przypadku nie ma potrzeby stosowania doładowania, ale także, jeśli są one na niestandardowym systemie plików w pudełku * nix, wtedy boost będzie przyjmował /. – tom

+0

To nie daje odpowiedniego separatora na VS2015. –

1

nie testowałem, ale wygląda na to, powinieneś być w stanie korzystać z tego w ostatniej doładowania:

http://www.boost.org/doc/libs/1_43_0/libs/filesystem/doc/reference.html

#include <boost/filesystem.hpp> 
#include <iostream> 

int main() { 
    std::cout << boost::filesystem::slash<boost::filesystem::path>::value << std::endl; 
} 
+1

Niestety "slash" nie jest już częścią API. –

11

Wydaje się, boost::filesystem::path::make_preferred jest bilet:

Efekty: Zawarta ścieżka jest konwertowana na preferowany format natywny . [Uwaga: w systemie Windows efekt polega na zastąpieniu ukośników przez ukośniki odwrotne . W POSIXie nie ma efektu. - koniec Uwaga]

przykład:

namespace bfs = boost::filesystem; 
bfs::path slash("/"); 
bfs::path::string_type preferredSlash = slash.make_preferred().native(); 
+0

Nowy adres URL http://www.boost.org/doc/libs/release/libs/filesystem/doc/reference.html#path-make_preferred – KindDragon

+0

@KindDragon: Dzięki –

+0

W systemach Windows to nie uda się skompilować, jako native() zwróci std :: wstring. Nie ma to jednak znaczenia dla celów tego pytania. – AI0867

Powiązane problemy