以std:: Fstream::in | std:: Fstream::out | std:: Fstream::app
Fstream open file in std::fstream::in | std::fstream::out | std::fstream::app mode
我需要能够创建一个不存在的文件。设计如下:我有一个线程用于所有文件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。但是文件不会被创建。有没有人能帮助我了解我在这里做错了什么,以及解决我的问题的正确方法是什么?
另外,如果唯一的选择是必须有不同的文件句柄,一个用于追加(需要在这里创建)和一个用于读取,如果我读取文件,而追加的文件句柄仍然打开,它是可以的吗?另外,create if不存在和append的打开模式应该是什么?
所以阅读std::stream open方法的文档,看起来当'in'和'app'都在open中指定时,open将失败。试着把"in"关掉,看看会发生什么。
"如果模式同时设置了trunc和app,则打开操作失败。如果其中一个设置了,但out没有设置,或者app和in都设置了,它也会失败。"
std:: fstream参考
根据c++ 98文档(我假设您正在使用c++ 98),您不能同时使用in
和app
模式打开文件。
对于在一个文件上有多个句柄,这应该有帮助:使用相同的fstream对同一个文件进行读写。
相关文章:
- 使 std::fstream 写入文件末尾,但从头开始读取
- 为什么当我在 std::string 中打开文件名的 fstream 时出现"no matching function"错误?
- 自定义 std::fstream,std::filebuf 的溢出和下溢函数未为每个字符调用
- Windows std::fstream 修改文件后打开()?
- std::fstream 在 MSVC 和 G++ 上使用 UTF-8 的不同行为
- std::getline with std::fstream
- 变量 std::fstream 文件具有初始值设定项,但类型不完整 编译错误
- std::fstream 已使用,但编译器抛出错误
- std::fstream 需要很长时间才能将大数据写入.csv文件中
- STD :: FSTREAM在使用预先分配的内存时在Main之后崩溃
- STD :: FSTREAM文件处理重复使用的问题
- 即使在包含 std 命名空间之后,fstream 在 Visual Studio 2017 中也无法正常工作
- 使用“QUrl”作为文件路径馈送到“std::fstream”
- 为什么与cstdio和std::fstream相比,SDL_RWops在写入文件时表现如此糟糕
- 检查是否使用std :: fstream编写文件
- 为什么 std::fstream 返回 void 而不是 bool
- 为什么'ifstream'和'ofstream'被添加到"std",而'fstream'可以同时达到这两个目的?
- 正在从std::fstream检索文件描述符
- 将对象序列化为加密的 std::fstream (C++)
- 当"std::fstream"无法打开时会引发异常吗?