在C++中打开工作目录之外的文件

4
我将翻译如下:

我有一个程序,将拥有多个资源文件,用户可以将其放置在与可执行文件不同的计算机位置。如何打开这些文件?

我发现很多答案说事情不能正常工作的原因是文件不在工作目录中。我已经尝试提供完全限定的路径:

ifstream str;
str.open("/home/millere/foo.txt")

但是那次尝试失败了。我知道路径是正确的(复制粘贴过来的)。我无法找到任何相关文档,但是我认为肯定是有可能的。(例如,从除~以外的任何地方运行vim ~/foo.txt命令都是可以的)。


3
你确定需要使用 iostream 而不是 ifstream 吗? - Maxpm
2个回答

9
假设您希望使用ifstream而非iostream,则您的代码是正确的。 ifstream可以使用文件路径以及工作目录中文件的名称。
如果文件不存在,则不会引发任何异常,但是将设置失败位(fail bit)。在尝试对流执行任何操作之前,应检查此内容。
std::ifstream input("/home/bob/stuff.txt");

if (!input) std::cerr << "Could not open the file!" << std::endl;

else
{
    // ...
}

如果您仍然无法从文件中提取数据,则问题可能出现在您的代码其他地方。

太好了,谢谢。我想知道之前是什么原因导致它无法工作。 - Ethan
@Maxpm,open()函数可以使用路径打开不同目录中的文件吗?例如/etc/passwd/ - Edeph

0

我曾经遇到过同样的问题,很快就发现了当尝试从不同的文件夹中获取时,open命令会有一个不同的源目录(如果使用Cmake,则是由cmake指定的目录)。你可以通过以下方式找出输出/输入源目录:

system("ls")

system("dir")

在Windows上显示当前输出/输入目录的内容。


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