【发布时间】:2014-03-12 00:30:13
【问题描述】:
我需要能够创建一个不存在的文件。设计如下: 我有 1 个线程用于所有文件 IO,并且在封装文件的数据结构中,我有一个 std::fstream 文件句柄。
我可以在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。 但该文件没有被创建。谁能帮我理解我在这里做错了什么,以及解决我的问题的正确方法是什么?
另外,如果唯一的选择是必须使用不同的文件句柄,一个用于追加(也需要在此处创建)和一个用于读取,如果我在追加的文件句柄仍处于打开状态时读取文件是否可以?另外,如果不存在和追加,创建的打开方式应该是什么?
【问题讨论】:
-
FWIW:我想指出您没有指定 public: 或 private:。在一个类中,一切都将默认为私有。你甚至不应该编译调用你的 open 函数的代码。