fstream没有解决路径

时间:2015-01-21 20:55:00

标签: c++ fstream

我是c ++的新手,并尝试编写一个简单的函数,将字符串保存到文件中。 当我将完整路径传递给fstream时,该函数有效,但它不会解析相对路径。

以下是我的代码的相关部分

#include <iostream>
#include <fstream>

void writeToFile ()
{
    std::fstream fs;
    fs.open ("/home/blabla/Documents/test.txt", std::fstream::in | std::fstream::out | std::fstream::app);
    fs << " test content";

    fs.close();
}

这很好用,但是我想在我的程序执行的文件夹中创建文件,所以我尝试了这个

fs.open ("./test.txt", std::fstream::in | std::fstream::out | std::fstream::app);

我也试过

fs.open ("~/Documents/test.txt", std::fstream::in | std::fstream::out | std::fstream::app);

他们都没有创建新文件,我没有收到任何错误消息。

我发现这篇文章表明,我可以将相对路径传递给fstream,但只提供了Windows示例。 How to use fstream objects with relative path?

我在Linux Mint上工作,目标环境是debian。

我很感谢任何提示或建议, 迈克尔

2 个答案:

答案 0 :(得分:2)

相对路径可以使用流。你有两个有趣的案例。波浪号(~)是一些特殊的角色,有些炮弹会解释。我怀疑fstream没有做那种解释。至于"./test.txt"的示例,我认为之前的评论是正确的 - 该文件已经创建 - 它不在您预期的位置。

答案 1 :(得分:0)

您的计划

#include <iostream>
#include <fstream>

void writeToFile () {
    std::fstream fs;
    fs.open ("./test.txt", std::fstream::in | std::fstream::out | std::fstream::app);
    fs << " test content";

    fs.close();
}

int main() {
    writeToFile();
}

Coliru上完全适合我。

ls输出中可以看到,文件已创建

a.out      << The executable program
main.cpp   << The source
test.txt   << The created text file

cat至少转储文件的内容

 test content

正如我在评论中所提到的,shell ~/Documents/test.txt之类的路径是由shell评估的,而./test.txt应该用于打开现有文件,如果您在同一目录中运行程序文件存在的位置。

  

&#34;他们都没有创建新文件,也没有收到任何错误消息。&#34;

如果std::fstream::open()由于某种原因失败,您将永远不会收到任何错误消息
您必须在该呼叫之后检查流状态,例如

 if(!fs) { std::cerr << "Could not open file" << std::endl; }

你可以,例如无权在此目录中创建文件。

另一种选择是使用std::basic_ios::exceptions()的{​​{1}}函数,在流状态进入错误状态时触发异常。