【问题标题】:ifstream objects from files in other directories in c++ifstream对象来自c ++中其他目录中的文件
【发布时间】:2013-02-20 00:58:19
【问题描述】:

我已将所有打算在我的应用程序中用作输入流的文件保存在一个名为“res”的文件夹中。我试图通过在应用程序中构建字符串然后使用类似这样的方式打开它们来将这些文件用作输入流:

....
ifstream inputFile;
....
char fileName[30];
strcpy(fileName,"res/")
switch(num){
case 1:
    strcat(fileName,"file1");
case 2:
    strcat(fileName,"file2");
....
}

inputFile.open(fileName);
....

但是文件没有打开,我不知道为什么; inputFile.is_open() 方法返回 false。所以我有两个问题:

  1. 如何引用子目录中的文件以及父目录中其他文件夹中的文件?

  2. 有没有比我在上面尝试做的事情更好的做法?我很确定有!

我在 Ubuntu 12.04 上使用 eclipse CDT 和 g++-4.6 编译器,如果这有所不同的话。

【问题讨论】:

  • 你的案子失败了!
  • 尝试使用绝对路径,只是为了测试。如果绝对路径一切正常,那么您就知道您的相对路径是错误的(路径必须相对于 exe)
  • 谢谢大家,使用绝对路径有效。另外,我发现了这个帖子:stackoverflow.com/questions/7276164/…,这很有帮助。不知道顶层目录是eclipse中的工作目录

标签: c++ input ifstream subdirectory


【解决方案1】:

实际上,大卫在评论中给出了正确的答案。 您忘记了案例后的休息并连接多个名称。 还有你的疯狂技能,你最好避免使用 strcat 和其他低级函数并使用 std::string,否则你的下一个问题将是关于你的程序转储核心

【讨论】:

  • 感谢您的观察。我匆忙将代码复制下来,我的程序中存在中断。我没有得到关于转储核心的评论,是因为字符串对象的长度不受限制吗?
  • 是的。您必须在调用 strcat 之前检查长度。但是你可以打电话给memcpy。但是当你可以只使用 std::string fn("dir/");fn += "file"; 时为什么要这样做
  • 如果你有中断那么程序是正确的,你可能从错误的目录运行它,但即使你不将文件放在子文件夹中也会中断。因此,对于您的第一个问题-您正确地引用了子目录,而对于第二个问题-当您不控制 cwd 时使用绝对路径,不要使用低级函数进行字符串连接,甚至查看 boost.filesystem
  • 啊,我明白了。非常感谢,真的很感激,因为我还是一个初学者,我需要我能得到的每一条建议。
猜你喜欢
  • 1970-01-01
  • 2016-08-15
  • 2012-02-08
  • 1970-01-01
  • 1970-01-01
  • 2010-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多