我需要能够创建一个不存在的文件 . 设计如下:我有1个线程用于所有文件IO,在封装文件的数据结构中,我有一个std :: fstream file_handle .
我可以在模式中创建和打开此文件 - std::fstream::in | std::fstream::out | std::fstream::app
吗?我需要这个,因为我必须使用这个句柄来做两件事 - 读取和写入文件的末尾 .
但是这不是创建文件 . 这就是我所拥有的:
class file_io
{
std::string filename;
std::fstream file_handle;
file_io(std::string name)
{
filename = name;
}
void open_file()
{
if(!file_handle.is_open())
{
file_handle.open(filename.c_str(), std::fstream::in | std::fstream::out | std::fstream::app);
if(!file_handle.is_open())
{
std::cout << "Could not open file " << filename ;
}
else
{
std::cout << "successfully opened file " << filename;
}
}
}
~file_io()
{
if(file_handle.is_open)
file_handle.close();
}
};
每当我需要写入文件的末尾或读取文件内容时,我都会调用open_file . 但是文件没有被创建 . 谁能帮助我理解我在这里做错了什么,以及解决我的问题的正确方法是什么?
另外,如果唯一的替代方法是必须使用不同的文件句柄,一个用于追加(需要在这里创建)和一个用于读取,如果我在读取文件句柄仍然打开时读取文件是否可以?此外,如果不存在并追加,那么开放模式应该是什么?
2 回答
因此,在std :: stream open方法中阅读文档,当打开时指定'in'和'app'时,open看起来会失败 . 尝试离开'in',看看会发生什么 .
“如果模式同时设置了截断和应用程序,则打开操作将失败 . 如果设置了任何一个但未输出,或者如果设置了app和in,它也会失败 . ”
std::fstream reference
根据C 98文档(我假设您使用的是C 98),您无法使用两种模式
in
和app
打开文件 .至于在文件上有多个句柄,这应该有帮助:Reading and writing to the same file using the same fstream .