簡體   English   中英

無法使用相對路徑打開文件? (C++ ifstream)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM