std::fstream doesn't create file

22,647

Solution 1

You're specifying std::fstream::in in your call to fstream::open(). This is known to force it to require an existing file.

Either remove std::fstream::in from your mode argument, or specify std::fstream::trunc in addition to the other flags.

Solution 2

It's a little messy but works. Doesn't overwrite the file if it exists but creates a new one if the first open fails.

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
Share:
22,647
herzl shemuelian
Author by

herzl shemuelian

Updated on May 08, 2020

Comments

  • herzl shemuelian
    herzl shemuelian almost 4 years

    I am trying to use std::fstream for io to file, and I want to create the file if it doesn't already exist.

      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);
    

    I get this result: "No such file or directory."

    How can I create the file in this case?