2010-06-11 114 views
20

Tôi mở tệp bằng cách sử dụng std::ifstream.Cách lấy đường dẫn tệp từ std :: ifstream in C++

Tôi có thể mở tệp bằng đường dẫn tương đối (file.txt) hoặc đường dẫn tuyệt đối (C:\test\file.txt).

Khi tôi chuyển một chuỗi như tên tệp, tôi không biết đó là đường dẫn tương đối hay tuyệt đối.

Ai có thể cho tôi biết cách nhận đường dẫn tuyệt đối sau khi tệp đã được mở thành công bằng cách sử dụng std::ifstream?

ví dụ .:

std::ifstream file(strFile); // strFile is "file.txt" or "C:\test\file.txt" 

Tôi muốn nhận được đường dẫn tuyệt đối sau khi các tập tin đã được mở thành công.

Cảm ơn,

+0

Bạn đang làm một ứng dụng bảng điều khiển hay bạn đang sử dụng một khuôn khổ để có một số loại giao diện người dùng (UI)? – Alerty

Trả lời

3

Các lớp fstream không có chức năng để truy cập hoặc chế biến các tên được sử dụng để mở tập tin với, và Thư viện chuẩn C++ không có chức năng xử lý tên tập tin - bạn sẽ phải viết mã chính mình, hoặc sử dụng thư viện của bên thứ ba hoặc các chức năng do hệ điều hành cung cấp.

17

Bạn không thể, std::ifstream không lưu trữ thông tin này.

gì bạn thể làm, tuy nhiên, là:

  1. quá trình sử dụng thư mục làm việc hiện tại để tạo nên đường dẫn tuyệt đối chính mình, hoặc
  2. sử dụng một thư viện như Boost.Filesystem thư viện để chuyển đổi giữa tương đối và đường dẫn tuyệt đối.

    boost::filesystem::path abs_path = boost::filesystem::complete("./rel/path"); 
    std::string abs_path_str = abs_path.string(); 
    
2

Tôi không nghĩ rằng nó có thể cho một std :: fstream. Tôi đã làm nó cho một FILE * trên Windows (một cách không di động). Xem from file object to file name.

Bạn đã xem xét việc mở rộng ifstream bằng lớp của riêng bạn có nhớ tên tệp không?

+1

Sẽ rất hữu ích nếu người đã bỏ phiếu cho câu trả lời 5 năm tuổi này đã để lại nhận xét giải thích những gì là sai. –

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