2013-04-12 54 views
1

在這個函數中,我試圖打開一個文件,其中包含一組我想分配給我的矩陣數組的字符,但是無論何時我運行該程序,控制檯都會顯示一個錯誤,指出該文件是沒開。另一個問題,如果我將該文件添加到我的資源文件夾我如何指定訪問該文件,而不是我在我的硬盤驅動器的根目錄?ifstream不打開文件

ifstream readSecondMap("C:\\map_2.txt", ifstream::in); 

void Stage::populateStage(ifstream &myStage, char (&myArray)[mapXcor][mapYcor]) { 
    if(myStage.is_open()){ 
     for(int a = 0; a < mapXcor+1; ++a){ 
      for(int b = 0; b < mapYcor+1; ++b){ 
       myArray[a][b] = (char) myStage.get(); 
      } 
     } 
     myStage.close();   
    } else { 
     std::cout << "Error: Unable to open File" <<std::endl; 
    } 
} 
+2

你能提出一個最小的,完整的和可編譯的測試用例來證明問題嗎? –

+1

如果這是Windows Vista或更高版本,用戶訪問控制可能是問題。 –

+0

確保C:\\ map_2.txt存在,並且您的程序可以訪問它。第二個問題可以通過使用相對路徑來解決:例如:../resource/map_2.txt –

回答

1

正如@TianyunLing指出:

我上的Kubuntu 12.10測試:

  1. 打開錯誤:如果map_2.txt不存在,會發生錯誤。
  2. 文件路徑:

    folder1
    +------- file1
    +------- file2
    folder2
    +------- program
    +------- file3

for your program to visit file1, use "../folder1/file1" , to visit "file3" , use file3 . (suppose that you don't change your program working directory)

還有一件事,你並不需要爲ifstream指定ifstream::in

+0

我很笨,不想檢查它,我有名爲map_two.txt的文件。 –

1

問題最有可能是以下中的一個:

1)map_2.txt不會在你ifstream的聲明中指定的位置存在。

2)您沒有足夠的權限訪問C驅動器的根文件夾。

我建議將文件移動到您的代碼臨時存儲在同一個文件夾中,並試圖讓它與該位置一起工作首先驗證問題是與文件位置或訪問權限有關,而不是您正在執行的操作在你的代碼中。然後將其移動到您的資源文件夾,並使用相對路徑名稱訪問它,如果它工作。如果文件與代碼位於同一個文件夾中,並且路徑名寫入正確,那麼您的代碼可能會出錯,並且需要發佈大部分代碼以公開問題給我們。