ifstream无法打开文件

4
在这个函数中,我试图打开一个包含一组字符的文件,并将其分配给我的矩阵数组。然而,每当我运行这个程序时,控制台都会显示一个错误,指出该文件未打开。另外一个问题是,如果我将该文件添加到我的资源文件夹中,如何指定访问该文件而不是我硬盘根目录中的文件?
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
你能否提供一个最小化、完整且可编译的测试用例来展示这个问题? - Benjamin Lindley
1
如果您的操作系统是Windows Vista或更高版本,则用户访问控制可能是问题所在。 - Jesse Good
确保 C:\map_2.txt 存在并且您的程序可以访问它。第二个问题可以通过使用相对路径来解决:例如:../resource/map_2.txt - Tianyun Ling
你是否在使用 Visual Studio 的调试模式? - 2to1mux
你是否有写入该目录的正确权限? - Martin York
2个回答

2
问题很可能是以下之一:
1)在你的 ifstream 声明中指定的位置不存在 map_2.txt 文件。
2)你没有足够的权限访问 C 盘根目录。
我建议将文件临时移动到与代码相同的文件夹中,并尝试使用该位置使其正常工作,以验证问题是否与文件位置或访问权限有关,而不是与你代码中的某些操作有关。如果它在文件与代码位于同一文件夹,路径名也写得正确时仍然无法工作,则很可能是在代码中出现了错误,你需要发布大部分代码以便我们检测问题。
然后,将其移动到资源文件夹,并使用相对路径名访问它。

1

正如@TianyunLing所指出的:

我在KUbuntu 12.10上进行了测试:

  1. 打开错误: 如果map_2.txt不存在,则会发生错误。
  2. 文件路径:

文件夹1
+------- 文件1
+------- 文件2
文件夹2
+------- 程序
+------- 文件3

对于您的程序来访问file1,请使用"../folder1/file1",要访问"file3",请使用file3。(假设您没有更改程序的工作目录)

还有一点,您不需要为ifstream指定ifstream::in


我太蠢了,没有检查文件名,实际上它的名字是map_two.txt。 - Daniel Sega

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接