2013-10-31 105 views
0

我正在Visual Studio 2012中開發一個項目,我無法弄清楚爲什麼這段代碼總是返回「無法打開文件!」,因爲tram.exe和stops.txt在相同的(Debug)文件夾。在C++中讀取文件的開始

#include <iostream> 
#include <fstream> 

int main (int count, char *arguments[]) { 
    if (count > 1) { 
     ifstream input("stops.txt"); 

     if (input.is_open()) { 

     } else { 
      cout << "The file can not be opened!"; 
     } 
    } 
} 
+0

當您導航到shell中的目錄並在shell中執行此文件時,它在那裏工作嗎? 如果是這樣,你應該a)提供絕對路徑或b)檢查VS的環境變量。 – icbytes

回答

4

Visual Studio中,默認情況下,將設置你的工作目錄到$(ProjectDir) - 那就是,你的生活vcxproj的文件夾 - 這會不會是因爲該文件夾的exe文件被寫入到相同的,所以你在當前目錄中找不到您的文本文件。

要麼手動更改工作目錄項目屬性 - >配置屬性 - >調試以匹配目標路徑,或更改文件名以指向完整(或相對)路徑。

+0

我將工作目錄更改爲「.. \ Debug」,但仍然無效。 –

+1

你不能設置這樣的相對目錄 - 你需要輸入一個完整的目錄,或者使用其中一個宏(如果你選擇選項,它會顯示所有的宏以及它們擴展到的內容。在這種情況下,$(TargetDir)應該做你想做的事情 – benjymous

+0

設置$(TargetDir)時,情況仍然是相同的: -/ –

-2

使用下面的代碼行:

ifstream的輸入( 「stops.txt」 的std :: fstream的::出);

它的工作。

+1

這將打開他的輸入文件進行寫入,這不是錯誤 - 因爲它失敗找不到文件 – benjymous

+1

這並沒有回答這個問題 –

+0

在指定的情況下,當我把這個語句放在代碼中時,我可以看到打開了這個文件,語句是「fstream input(」stops.txt「 );「,我可以看到文件沒有打開。 –

0

找出你正在運行的進程的當前工作目錄是

http://msdn.microsoft.com/en-us/library/windows/desktop/aa364934(v=vs.85).aspx

實例什麼:

unsigned int length = 0; 
char* workingDirectory; 

length = GetCurrentDirectory(0, NULL); // How large should my buffer be? 
workingDirectory = new char[length]; // Allocate buffer 
GetCurrentDirectory((DWORD) length, (LPTSTR) workingDirectory); // Fill with string 
std::cout << workingDirectory << std::endl; // Output string 
delete [] workingDirectory; // Make sure to delete it 

你可以把它變成功能

void getWorkingDirectory(std::string& dir) 
{ 
    unsigned int length = 0; 
    char* buffer; 
    length = GetCurrentDirectory(0, NULL); 
    buffer = new char[length]; 
    GetCurrentDirectory((DWORD) length, (LPTSTR) buffer); 
    dir = buffer; 
    delete [] buffer; 
} 

注意:我沒有測試過這個。