[英]Cannot open file with relative path? (C++ ifstream)
我知道這似乎是一個簡單的問題,但我嘗試了所有我能想到的方法,但對那些本來不應該成為問題的問題卻無濟於事。
這是一個打開文件的小型 C++ 程序。 當我用它的絕對文件路徑打開它時,它工作正常。 但是,對於相對路徑,它會停止工作。
這是程序的文件路徑和我正在嘗試讀取的文件:
C++ 程序: "/Users/Baggio/C++/Lab0/Lab0/Lab0/main.cpp"
C++/ "/Users/Baggio/C++/Lab0/Lab0/Lab0/main.cpp"
文件: /Users/Baggio/C++/Lab0/Lab0/Lab0/result.txt
, /Users/Baggio/C++/Lab0/Lab0/Lab0/dict.txt
這是代碼片段:
#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>
#include <cstdlib>
using namespace std;
int main(int argc, const char * argv[]) {
// string dict_filename = "/Users/Baggio/C++/Lab0/Lab0/Lab0/dict.txt";
// string result_filename = "/Users/Baggio/C++/Lab0/Lab0/Lab0/result.txt";
string dict_filename_string = "dict.txt";
string result_filename_string = "result.txt";
const char* dict_filename = dict_filename_string.c_str();
const char* result_filename = result_filename_string.c_str();
// open files
ifstream dict_file(dict_filename, ifstream::in);
ifstream result_file(result_filename, ifstream::in);
if (!dict_file || !result_file) {
cerr << "File could not be opened." << endl;
exit(1);
}
}
執行結果
File could not be opened.
我確信我已經正確地完成了所有包含,並且正確地為 ifstream 構造函數參數設置了數據類型。 我能想到的唯一值得一提的是我使用的系統:我在 Mac 上,我使用 XCode6 作為我的 IDE。
另外,我嘗試將文件的位置(results.txt 和 dict.txt)移動到這些位置無濟於事:
/Users/Baggio/C++/Lab0/Lab0/Lab0/
/Users/Baggio/C++/Lab0/Lab0/
/Users/Baggio/C++/Lab0/
/Users/Baggio/C++/
感謝您的幫助伙計們!! 任何建議或想法表示贊賞。
運行程序時打印出當前工作目錄:
char buffer[256];
char *val = getcwd(buffer, sizeof(buffer));
if (val) {
std::cout << buffer << std::endl;
}
這將告訴您從哪里運行程序,以及為什么路徑與相對路徑不匹配。 相對路徑相對於當前工作目錄,而不是二進制文件所在的位置。
如果你想讓路徑相對於二進制文件的位置,那么你必須自己做。 許多編程語言都提供此選項,但它不是 C++ 內置的。 您可以通過查找使用可執行做到這一點argv[0]
從main
。 然后您需要刪除可執行路徑的文件組件,並將其替換為您感興趣的文件名。
從 C++17 開始,您可以使用std::filesystem::current_path()
而不是getcwd
。
std::cout << std::filesystem::current_path() << std::endl;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.