2013-04-12 56 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驱动器的根文件夹。

我建议将文件移动到您的代码临时存储在同一个文件夹中,并试图让它与该位置一起工作首先验证问题是与文件位置或访问权限有关,而不是您正在执行的操作在你的代码中。然后将其移动到您的资源文件夹,并使用相对路径名称访问它,如果它工作。如果文件与代码位于同一个文件夹中,并且路径名写入正确,那么您的代码可能会出错,并且需要发布大部分代码以公开问题给我们。