fstream 不解析路径

fstream doesn't resolve path

我是 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);

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

我发现了这个 post,这表明我可以将相对路径传递给 fstream,但只给出了 windows 示例。 How to use fstream objects with relative path?

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

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

相对路径确实适用于流。你有两个有趣的案例。波浪号 (~) 是一些 shell 解释的特殊字符。我怀疑 fstream 不做那种解释。至于 "./test.txt" 的示例,我认为之前的评论是正确的 - 该文件已创建 - 只是不在您预期的位置。

你的程序

#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

如我的评论所述,~/Documents/test.txt 之类的路径由 shell 评估,而 ./test.txt 应该可以打开现有文件,如果你是 运行 你的程序在文件所在的同一目录中。

"Neither of them created a new file and i did not get any error message."

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

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

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

另一种选择是使用std::fstream()std::basic_ios::exceptions()函数,在流状态遇到错误条件时触发异常。