std :: fstream не создает файл - PullRequest
28 голосов
/ 12 января 2012

Я пытаюсь использовать std :: fstream для ввода-вывода в файл, и я хочу создать файл, если он еще не существует.

  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 ]

41 голосов
/ 12 января 2012

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

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

10 голосов
/ 22 октября 2012

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

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
...