2011-12-05 33 views
14

Có cách nào để lấy ký tự dấu tách đường dẫn của nền tảng bằng cách sử dụng Boost.Filesystem không? Theo dấu phân cách đường dẫn, tôi có nghĩa là / cho Unix và \ cho Windows.Lấy dấu phân cách đường dẫn nền tảng bằng cách sử dụng Boost.Filesystem

Tôi đã biết tôi có thể sử dụng boost::filesystem::path::operator/ để nối hai đường dẫn cùng với ký tự dấu tách thích hợp. Nhưng tôi chỉ muốn / hoặc \.

Tôi cũng biết tôi có thể sử dụng #ifdef _WIN32, nhưng tôi muốn rằng Boost.Filesystem cho tôi biết ký tự dấu tách thích hợp.

EDIT: Tôi muốn sử dụng version 3 API Boost.Filesystem, như được sử dụng trong Boost 1.48.

+0

D'oh! Tôi đã tìm kiếm một API sẽ trực tiếp cung cấp cho tôi dấu phân cách đường dẫn, và không nghĩ đơn giản bằng cách sử dụng: 'boost :: filesystem :: path ("/"). Native()' –

+0

Ai đó có thể xác nhận rằng 'boost: : filesystem :: path ("/"). native() 'trả về' "\\" 'trên Windows? –

+3

Để bạn biết, Windows chấp nhận '/' làm dấu tách pafh. – Xeo

Trả lời

8

Tính đến phiên bản 1,57, Tăng bây giờ có một giải pháp tốt hơn, đó chỉ là liên tục char/wchar_t (phụ thuộc vào nền tảng khác nhau): boost::filesystem::path::preferred_separator.

Đọc http://www.boost.org/doc/libs/release/libs/filesystem/doc/reference.html#Operating-system-examples để biết thêm thông tin. Thậm chí còn có nhiều tính năng phụ thuộc vào hệ thống hơn.

ví dụ đơn giản:

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

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

Một cái nhìn nhanh chóng thông qua các nguồn tăng cường cho thấy rằng tăng chỉ sử dụng một ifdef để có được seperator trong giai đoạn tiền xử lý. Trong trường hợp này không cần phải sử dụng tăng mà còn, nếu chúng ở trên một hệ thống tập tin không chuẩn trên một hộp * nix thì tăng sẽ không thể giả định /. – tom

+0

Điều này không cung cấp dấu phân cách phù hợp cho VS2015. –

1

đã không được thử nghiệm này, nhưng có vẻ như bạn sẽ có thể sử dụng điều này trên một tăng gần đây:

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

Đáng buồn thay, 'dấu gạch chéo 'dường như không còn là một phần của API. –

11

Nó có vẻ như boost::filesystem::path::make_preferred là vé:

Hiệu ứng: Tên đường dẫn được chứa được chuyển đổi sang định dạng gốc tự nhiên là . [Lưu ý: Trên Windows, hiệu ứng là để thay thế dấu gạch chéo bằng dấu gạch chéo ngược. Trên POSIX, không có hiệu lực. - cuối note]

Ví dụ:

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

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

+0

@KindDragon: Cảm ơn –

+0

Trên cửa sổ, thao tác này sẽ không biên dịch được, dưới dạng gốc() sẽ trả về std :: wstring. Đó là không liên quan cho các mục đích của câu hỏi này mặc dù. – AI0867

Các vấn đề liên quan