2015-01-27 25 views
5

Tôi cố tải một tệp với fstream. Mã trông giống như thế nàyĐường dẫn tương đối với fstream C++

file.open("../levels/level0.lvl"); 
if (file.is_open()) { 
    while (!file.eof()) { 
     std::getline(file, Str); 
     list = ReadLine(Str, list); 
    } 
} 

Nhưng không tải gì cả. Chỉ khi đường dẫn tuyệt đối. Làm thế nào tôi có thể làm cho đường dẫn tương đối?

Thư mục "cấp" được lưu trữ trong thư mục gỡ lỗi. cùng thư mục với exe.

+2

Đường dẫn tương đối của bạn hợp lệ. Bạn có thể gây nhầm lẫn * thư mục hoạt động của bạn * với * thư mục thực thi của bạn *? –

+0

Bạn nói đúng. Cảm ơn và xin lỗi vì sai lầm ngu ngốc này – SaschaDeWaal

+2

@Beatnory _'while (! File.eof()) '_ Bạn cũng nên lưu ý: [** Tại sao iostream :: eof bên trong một điều kiện vòng lặp được coi là sai? **] (http: //stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-wrong) –

Trả lời

6

"Thư mục" cấp "được lưu trữ trong thư mục gỡ lỗi. Cùng thư mục với exe."

Không quan trọng vị trí thư mục levels có liên quan đến đường dẫn của tệp thi hành.
Thư mục có liên quan để xác định đường dẫn tương đối là thư mục làm việc nơi tệp thực thi của bạn thực sự được bắt đầu.


Xem tại đây: fstream doesn't resolve path.

0

Xử lý đường dẫn là hệ điều hành cụ thể. Cách chính xác để xử lý việc này là thêm một cách người dùng chỉ định đường dẫn đến ứng dụng của bạn và sau đó sử dụng đường dẫn đó. Ví dụ: bạn có thể thêm tùy chọn dòng lệnh --level-file=<path>. Sau đó, chương trình của bạn có thể đọc đường dẫn từ tùy chọn đó và chuyển nó tới hàm tạo dòng đầu tiên.

Xem câu trả lời của tôi cho câu hỏi này để biết thêm: https://stackoverflow.com/a/40980510/2345997

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