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()
函数,在流状态遇到错误条件时触发异常。
我是 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()
函数,在流状态遇到错误条件时触发异常。