2009-08-30 70 views
0

輸出:VS C++程序僅在.exe從文件夾運行時才起作用? [不VS調試]從調試

打開的文件...

文件內容:

從.exe文件輸出(通過雙擊從/項目/調試運行) :

打開的文件...

文件的內容: line1 line2 等。 。

的源代碼:

#include <iostream> 
#include <fstream> 
#include <regex> 
#include <string> 
#include <list> 

using namespace std; 
using namespace tr1; 


int main() 
{ 
    string line; 
    list<string> dataList; 

    ifstream myFile("test_data.txt"); 
    if (! myFile) 
    { 
     cout << "Error opening file. \n"; 
     return 0; 
    } 
    else 
    { 
     cout << "File opened... \n"; 
     while(getline(myFile, line)) { 
      dataList.push_back(line); 
     } 
    } 

    cout << "\n\n File contents:"; 

    list<string>::iterator Iterator; 
    for(Iterator = dataList.begin(); 
      Iterator != dataList.end(); 
      Iterator++) 
    { 
     cout << "\t" + *Iterator + "\n"; 
    } 




    getchar(); 
    return 1; 
} 

感謝您的幫助!

我現在明白了這個問題,謝謝。顯然,這也表明這種文件錯誤處理方法毫無價值。我也改正了這一點。再次感謝。

回答

4

你編碼此行的方式:

ifstream myFile("test_data.txt"); 

意味着代碼正在尋找在當前工作目錄中的文件。

當你在調試器外部運行時,它將是/project/debug(就你的情況而言),這是文件推測的位置。

當您運行在將會(可能)爲\project的調試器中,該調試器將不包含該文件。

您需要有兩個文件副本,硬編碼文件的完整路徑,或者有一些在運行時指定文件的方式。

1

從Visual Studio啓動時,您的.exe文件通常從Debug/../運行。當你雙擊它時,它在'Debug /'中運行。

無論是移動你的test_data.txt,還是因爲大多數開發者和創建您的二進制文件和數據運行之前導出的輸出目錄。

2

您也可以在VC的項目的Debug屬性頁面中指定工作目錄(它將在哪裏查找test_data.txt)。