2015-10-05 77 views
-2
string iName, oName; //input and output file names, respectively 
double avgIn; 

cout << "Enter file name for input: "; 
getline(cin, iName) || die("Could not read input file name"); 
if (iName.empty()) 
    iName = DEF_IN_NAME; 

ifstream fin; 
fin.open(iName); 
if (!fin) die("Could not open " + iName + " for input\n"); 

在我的這部分代碼沒有打開的文件,我需要在輸入文件名的字符串被打開,如果輸入什麼,我將它設置爲DEF_IN_NAME(這是「input.txt中」)。我嘗試輸入「i.txt」以及不輸入任何內容(默認爲「input.txt」),並且在這兩種情況下,我的程序都會調用die函數(只輸出錯誤消息並退出程序)。可以輸入C++

我的文件和我的.exe文件在同一個文件夾中,所以我不確定爲什麼會發生這種情況。這是什麼原因造成的,我該如何解決?

編輯:我應該提到的第二個死亡的電話是執行,而不是第一個。也就是說,該文件無法打開輸入。

我從窗口10運行此Visual Studio Express的2013(調試)

+1

你還沒有告訴我們關於你的操作系統的任何信息(或者可能是帶有.exe的Windows),或者你如何啓動程序。通常的原因是系統「當前目錄」不是你期望的系統。 –

+0

我不知道C++,但是在C中,你會打印'strerror(errno)'來獲得打開失敗的原因。 – melpomene

+0

@BoPersson道歉,在原文中增加了更多信息。 – MV94

回答

0

如果您對要讀取的文件沒有指定明確的路徑,運行時庫將默認爲進程當前工作目錄。如果您正在調試器中運行程序,那麼當前的工作目錄將是您的項目目錄,而不是可執行文件鏈接的位置。

+0

除非更改項目屬性「調試」選項卡。 –

+0

@JonTrauntvein我已經嘗試將我的文件放置在項目目錄以及可執行文件鏈接的位置,並獲得相同的結果。 – MV94

+0

@ MV94寫一個文件,看看它在哪裏結束。 – user4581301