Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

std::fstream doesn't create file

Tags:

c++

stl

fstream

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?

like image 449
herzl shemuelian Avatar asked Jan 12 '12 13:01

herzl shemuelian


2 Answers

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.

like image 151
Frédéric Hamidi Avatar answered Sep 19 '22 13:09

Frédéric Hamidi


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 
like image 44
hyprnick Avatar answered Sep 20 '22 13:09

hyprnick