【问题标题】:ifstream not opening fileifstream没有打开文件
【发布时间】:2013-04-12 01:28:18
【问题描述】:

在这个函数中,我试图打开一个文件,其中包含一组我想分配给我的矩阵数组的字符,但是每当我运行这个程序时,控制台都会显示一个错误,指出文件未打开。另一个问题,如果我将该文件添加到我的资源文件夹中,我如何指定访问该文件而不是我在硬盘驱动器根目录中的文件?

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;
    }
}

【问题讨论】:

  • 你能提供一个最小的、完整的和可编译的测试用例来演示这个问题吗?
  • 如果这是 windows vista 或更高版本,则可能是用户访问控制问题。
  • 确保C:\\map_2.txt存在并且你的程序可以访问。第二个问题可以通过使用相对路径来解决:例如:../resource/map_2.txt
  • 您是否偶然在调试模式下使用了 Visual Studio?
  • 你是否有正确的权限写入目录。

标签: c++ ifstream


【解决方案1】:

问题很可能是以下之一:

1) map_2.txt 不存在于您在 ifstream 声明中指定的位置。

2) 您没有足够的权限访问您的 C 盘的根文件夹。

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

【讨论】:

    【解决方案2】:

    正如@TianyunLing 所说:

    我已经在 KUbuntu 12.10 上测试过:

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

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

    让您的program 访问file1,使用"../folder1/file1",访问"file3",使用file3。 (假设您不更改您的 program 工作目录)

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

    【讨论】:

    • 我很笨,没有检查它,我有一个名为 map_two.txt 的文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多