std :: fstream不会创建文件

时间:2012-01-12 13:31:05

标签: c++ stl fstream

我正在尝试将std :: fstream用于io文件,如果文件尚不存在,我想创建该文件。

  std::fstream my_stream
  my_stream.open("my_file_name",std::fstream::binary | std::fstream::in | std::fstream::out);
  if(!my_stream)
      std::cout<<"error"<<strerror(errorno);

我得到了这个结果:          “没有这样的文件或目录。”

在这种情况下如何创建文件?

2 个答案:

答案 0 :(得分:41)

您在致电fstream::open()时指定了std::fstream::in。这是known以强制它需要现有文件。

std::fstream::in参数中删除mode,或者除了其他标记外还指定std::fstream::trunc

答案 1 :(得分:10)

它有点乱,但有效。如果文件存在,则不会覆盖该文件,但如果第一次打开失败,则会创建一个新文件。

std::fstream my_stream
my_stream.open("my_file_name",std::fstream::binary | std::fstream::in | std::fstream::out);

if(!my_stream)
{
    my_stream.open("my_file_name",std::fstream::binary | std::fstream::trunc | std::fstream::out);    
    my_stream.close();
    // re-open with original flags
    my_stream.open("my_file_name",std::fstream::binary | std::fstream::in | std::fstream::out);
}
else
{
    // read something
} 

// read/write here