0

我有一个要在 C++ 程序中加载的简单数据文件。由于奇怪的原因,它不起作用:

  • 我在 Windows 上尝试过,假设文件位于同一目录中:failed
  • 我通过移动 C:\ 目录中的文件在 Windows 上进行了尝试:工作
  • 我在 Linux 上尝试将文件放在同一目录中:failed

片段:

void World::loadMap(string inFileName) {
  ifstream file(inFileName.c_str(), ios::in);
  if (file) {
  }
  else 
  {
    cout<<"Error when loading the file \n";
    exit(-1);
  }
}

我这样调用 loadMap 方法:

World::Instance()->loadMap("Map.dat");

(世界是一个单例类)。

如何通过使用 try-catch 或其他任何方法找到确切的错误?

4

4 回答 4

2

默认情况下,无法打开的文件(或任何其他 I/O 操作)不会引发异常。您可以更改此行为,但该标准仍然没有提供从异常中提取失败的确切原因的方法。

于 2010-01-03T13:41:44.820 回答
1

Linux 文件名区分大小写。
你的文件实际上是命名的map.dat吗?

另外,您是否尝试将文件放在当前目录中?

于 2010-01-03T13:42:18.667 回答
1

罗杰·佩特评论:

使用"./filename"./假设甚至不需要)可以跨 Windows 和 Linux 移植,但问题可能是 CWD 不是他认为的那样。

于 2010-01-03T15:44:41.430 回答
1

问题是工作目录。

当您为文件指定相对路径时,它使用工作目录(可能与您的应用程序存储在文件系统上的目录不同)。

  • 因此,您要么需要使用绝对路径。
  • 或者您需要找到当前工作目录并指定与该目录相关的文件。
  • 或者更改当前工作目录。
于 2010-01-03T17:59:46.090 回答