2012-04-10 108 views
0

我有一个程序会有几个资源文件,用户可以将它们放在与可执行文件不在同一个文件夹中的计算机上。我如何打开这些文件?在工作目录之外的C++中打开一个文件

我发现了很多答案,说事情不工作的原因是该文件不在工作目录中。我试过提供完全合格的路径:

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

但这是不成功的。我知道路径是正确的(复制和粘贴)。我找不到任何文档,但我认为它必须是可能的。 (例如~作品以外的任何地方的vim ~/foo.txt)。

+3

你确定要'iostream'而不是'ifstream'吗? – Maxpm 2012-04-10 17:59:17

+0

是的,错字。固定。 – Ethan 2012-04-11 13:36:13

回答

2

假设你打算使用ifstream而不是iostream,那么你的代码是正确的。 ifstream可以使用文件的路径以及工作目录中文件的名称。

如果文件不存在,则不会抛出异常,但会设置失败位。在尝试对流进行任何操作之前,您应该检查这一点。

std::ifstream input("/home/bob/stuff.txt"); 

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

else 
{ 
    // ... 
} 

如果仍然无法提取文件数据,问题是在你的代码别的地方。

+0

非常好,谢谢。我不知道是什么让它不能工作。 – Ethan 2012-04-11 13:42:56

+0

@Maxpm'open()'函数可以使用一个路径在另一个目录中打开一个文件吗? for xample'/ etc/passwd /'? – Edeph 2013-10-19 15:50:53