2013-05-01 33 views
9

Tôi muốn lặp qua tất cả các tệp trong một thư mục và in nội dung của chúng. Boost xử lý phần lặp lại rất độc đáo nhưng tôi không biết cách chuyển đổi thành một số const char *.Cách chuyển đổi tăng :: hệ thống tập tin :: directory_iterator thành const char *

boost::filesystem::directory_iterator path_it(path); 
    boost::filesystem::directory_iterator end_it; 
    while(path_it != end_it){ 
     std::cout << *path_it << std::endl; 

     // Convert this to a c_string 
     std::ifstream infile(*path_it); 
    } 

Tôi cố gắng để đọc documentation nhưng không thể tìm thấy bất cứ điều gì như string hoặc c_str(). Tôi là người mới đối với cả hai số C++boost và hy vọng tìm được một số tài liệu giống như tài liệu về cơ bản cho tôi biết các thành viên là gì và các chức năng nào sẵn có thay vì bán mã nguồn.

Xin lỗi vì câu trả lời nhưng ai đó có thể cho tôi biết cách chuyển đổi *path_it thành c string.

+0

Đó là trong [directory_entry] (http://www.boost.org/doc/libs/1_53_0/libs/filesystem/doc/reference. html # Class-directory_entry). –

+0

Cảm ơn, đã tìm ra điều này. Bất kỳ lời khuyên nào về cách tôi có thể học cách tăng cường theo một cách ít đau đớn hơn? – nikhil

+1

Tôi nghĩ rằng đặt cược tốt nhất của bạn là thử và tìm các bài kiểm tra đơn vị. Hoặc tự viết chúng để tìm ra. –

Trả lời

12

Khi bạn dereference iterator nó trả về một directory_entry:

const directory_entry& entry = *path_it; 

Bạn có thể sử dụng cùng với operator<<ostream, như bạn đã phát hiện ra:

std::cout << entry << std::endl; 

Bạn có thể tạo một chuỗi sử dụng ostringstream:

std::ostringstream oss; 

oss << entry; 

std::string path = oss.str(); 

Hoặc bạn có thể truy cập vào các con đường như một string trực tiếp từ directory_entry:

std::string path = entry.path().string(); 
+1

Cảm ơn cả nhận xét và câu trả lời. – nikhil

1

Sau khi xem tài liệu, tôi nghĩ bạn có thể thực hiện path_it-> path(). C_str() kể từ khi một directory_iterator lặp lại trên directory_entry có hàm đường dẫn mà lần lượt có hàm c_str.

+0

Tôi cần làm 'path_it-> path(). String(). C_str()' để làm cho nó hoạt động. – nikhil

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