我是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。
我很感谢任何提示或建议, 迈克尔
答案 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}}函数,在流状态进入错误状态时触发异常。