我想在给定路径上创建一个相对于当前目录的文件。以下代码表现不正常。我有时看到创建的文件,有时则没有。这可能是因为当前目录的更改。这是代码。
//for appending timestamp
timeval ts;
gettimeofday(&ts,NULL);
std::string timestamp = boost::lexical_cast<std::string>(ts.tv_sec);
//./folder/inner_folder is an existing directory
std::string filename = "./folder/inner_folder/abc_"+timestamp+ ".csv";
std::ofstream output_file(filename);
output_file << "abc,efg";
output_file.close();
现在,问题是仅在某些情况下创建文件。那是当我从当前目录作为命令行参数输入文件时,它工作正常。
./program input_file
如果我有这样的东西,它就不起作用
./program ./folder1/input_file
我尝试将完整路径作为ofstream
的参数,我仍然看不到创建的文件。
这样做的正确方法是什么?感谢
答案 0 :(得分:3)
ofstream
不会在文件路径中创建缺少的目录,您必须确保目录存在,如果不是使用特定于操作系统的api或boost's file system library创建它们。
始终检查IO操作的结果,并查询系统错误代码以确定失败原因:
if (output_ file.is_open())
{
if (!(output_file << "abc,efg"))
{
// report error.
}
}
else
{
const int last_error = errno;
std::cerr << "failed to open "
<< filename
<< ": "
<< strerror(last_error)
<< std::endl;
}