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);
Получаю этот результат: "Нет такого файла или каталога".
Как я могу создать файл в этом случае?
Ответы
Ответ 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