Подтвердить что ты не робот

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

Получаю этот результат:         "Нет такого файла или каталога".

Как я могу создать файл в этом случае?

4b9b3361

Ответ 1

Вы указываете std::fstream::in в своем обращении к fstream:: open(). Это известный, чтобы заставить его потребовать существующий файл.

Либо удалите std::fstream::in из вашего аргумента mode, либо укажите std::fstream::trunc в дополнение к другим флагам.

Ответ 2

Это немного грязно, но работает. Не перезаписывает файл, если он существует, но создает новый, если первый открытый сбой.

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