我需要能够创建一个不存在的文件。设计如下:我有一个线程用于所有的文件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。但是不会创建该文件。有没有人能帮我弄明白我做错了什么,解决我的问题的正确方法是什么?
此外,如果唯一的替代方案是必须使用不同的文件句柄,一个用于append (这里也需要创建),另一个用于读取,那么当append的文件句柄仍然打开时,是否可以读取文件?另外,如果不存在create和append,那么打开模式应该是什么?
发布于 2014-03-12 08:44:44
因此,读取std::stream open方法上的文档时,当在open中指定' in‘和'app’时,打开看起来将失败。试着把“in”去掉,看看会发生什么。
如果模式同时设置了trunc和app,则打开操作将失败。如果设置了其中一项但未设置out,或者同时设置了app和in,则打开操作也会失败。
std::fstream reference
发布于 2014-03-12 08:47:39
根据C++ 98文档(我假设您使用的是C++98),您不能同时使用in和app模式打开文件。
对于在一个文件上有多个句柄,这应该会有帮助:Reading and writing to the same file using the same fstream。
https://stackoverflow.com/questions/22339594
复制相似问题