我已經在64位Windows 7機器上的Visual Studio C++ 2012中編寫了一個非常簡單的程序;它所做的只是使用std :: ifstream打開一個文件並打印其內容。ifstream問題從Windows任務欄執行時
int main() {
std::ifstream fileStream("Test.txt");
if (!fileStream.is_open()) {
cerr<<"Error: "<<strerror(errno)<<endl;
} else {
std::string testString;
getline(fileStream, testString);
cout<<testString<<endl;
}
}
夠簡單,而且工作得很好。在此代碼正在運行時,任務欄上會出現一個圖標,表示從此代碼生成的可執行文件。如果要右鍵單擊該圖標並運行生成的可執行文件的另一個實例,ifstream將失敗,並指出該文件不存在。當然,它在正常執行時已經正確執行。
如果上述內容不夠奇怪,那麼我試圖將可執行文件固定到任務欄並重復實驗。 它的工作原理是。無論您從任務欄創建多少個實例,它在固定時都能正常工作。
使用完整路徑而不是相對路徑也適用,但我正在開發一個更大的項目,該項目存儲相對於可執行文件的資源;當文件已經存在時,我不想確定可執行文件的路徑。
我確實調用了GetModuleFileName來查找執行路徑,它在所有執行過程中看起來都是一樣的。
所以我的問題是,我錯過了什麼?如果以這種方式運行,爲什麼我無法找到那些字符爲的文件就在我的可執行文件的旁邊?
可能工作目錄是不同的? –
最有可能的工作目錄更改。如果使用絕對文件路徑而不是相對文件路徑會發生什麼? – NathanOliver
'GetModuleFileName'是可執行路徑,與當前工作目錄大致無關。 –