std :: fstream不会创建文件

her*_*ian 30 c++ fstream stl

我正在尝试使用std :: fstream for 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);
Run Code Online (Sandbox Code Playgroud)

我得到这个结果:"没有这样的文件或目录."

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

Fré*_*idi 43

std::fstream::in在调用fstream :: open()时指定.众所周知,这会强制它需要现有文件.

std::fstream::in从您的mode参数中删除,或者指定std::fstream::trunc除其他标志之外的其他标志.

  • 并注意到`trunc`每次都会创建一个空文件. (23认同)
  • 但是,如果我想要打开该文件进行读写并创建该文件(如果该文件不存在)怎么办?标准 libc `open()` 可以通过指定 `O_CREAT` 标志来做到这一点。这在C++中不可能吗? (4认同)

inc*_*ick 12

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

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
Run Code Online (Sandbox Code Playgroud)