我是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示例。如何使用具有相对路径的fstream对象?
我在Linux上工作,目标环境是debian。
我很感谢你的暗示和建议,迈克尔
发布于 2015-01-21 21:48:29
你的程序
#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();
}在柯尔鲁上对我来说非常好。
正如您从ls输出中看到的那样,创建了该文件
a.out << The executable program
main.cpp << The source
test.txt << The created text filecat至少转储文件的内容。
test content正如我在注释中提到的,像~/Documents/test.txt这样的路径是由shell计算的,而如果您在文件所在的同一目录中运行程序,则./test.txt应该用于选择现有文件。
“他们都没有创建一个新文件,我也没有收到任何错误消息。”
如果std::fstream::open()因某种原因失败,您将永远不会收到任何错误消息。
在调用之后,您必须检查流状态,比如。
if(!fs) { std::cerr << "Could not open file" << std::endl; }例如,您可能没有在此目录中创建文件的权限。
另一个选项是使用std::basic_ios::exceptions()函数的std::fstream(),当流状态遇到错误时触发异常。
发布于 2015-01-21 21:20:00
相对路径确实适用于流。不过你有两个有趣的案子。倾斜体(~)是一些贝壳解释的一个特殊字符。我怀疑fstream并没有那样的解释。至于"./test.txt"的例子,我认为前面的评论是正确的--该文件已经创建--只是不符合您的预期。
https://stackoverflow.com/questions/28076633
复制相似问题