-1
我正在嘗試從文件讀取。它似乎要(至少)相對路徑。我看到的大多數教程只使用一個文件名。從文件讀取時,參數必須是完整路徑?
我有src
dir和build
dir在一個目錄中。當我傳遞一個相對路徑時,它可以工作。但是,如果我嘗試在Docker容器內運行此代碼,現在我的代碼將無法工作,除非我給它一個絕對路徑。
我做錯了什麼?讀取文件不會很困難。
這裏是我的代碼:
std::string line;
std::vector<std::string> thingsToDo;
std::ifstream myfile(filename);
if (myfile.is_open()) {
while (getline(myfile, line)) {
thingsToDo.push_back(line);
}
myfile.close();
}
else {
std::cout << "Unable to open file" << std::endl;
}
其中 「filename」 是...
std::string filename = "things.txt" << works in tutorials, but not in real life :\
std::string filename = "../src/things.txt" << works on my machine :) (because remember, we are running the code from 'build' dir)
std::string filename = "/tmp/abolute/path/things.txt" << works in Docker :\
幫助...
如果相對路徑沒有不同的環境中工作,那麼出發點發生了變化。檢查當前的工作目錄。 –
如果您從IDE運行程序,工作目錄可能不是您所期望的。如果從命令行運行,工作目錄就是您當前所在的目錄。大多數IDE都有可以爲項目設置固定工作目錄的選項,並且可以從命令行將cd切換到正確的目錄。但重點在於,程序中的當前工作目錄可能是意想不到的,並且相對路徑(例如,甚至是「../」路徑)可能會在沒有通知的情況下失敗。絕對路徑永遠不會失敗(除非路徑當然不存在)。 –
你們是怎麼做到的?就像,我從命令行運行這個程序。所以我們說我正在'建立'。我去./myProgram。現在我運行Docker。現在我調用我的程序,如/ tmp/abolute/path/src/myProgram。程序認爲該文件現在在哪裏?你懂? – Bear