fstream в и на несуществующем файле

Это возможный открыть fstream на файле, который не существует с обеими iOS:: в и iOS:: не получая ошибку?

9
задан svick 3 July 2013 в 14:52
поделиться

3 ответа

#include <iostream>
#include <fstream>
using namespace std;

int main () {
  fstream f("test.txt", fstream::in | fstream::out);
  cout << f.fail() << endl;
  f << "hello" << endl;
  f.close();    
  return 0;
}

Этот код напечатает 1 и не создаст файл «test.txt», если он не завершится. Таким образом, невозможно открыть файл, который не существует, и выполнить его поток без получения ошибки.

0
ответ дан 4 December 2019 в 21:08
поделиться

Чтобы открыть fstream для файла, который не существует для ввода и вывода (произвольный доступ), без получения ошибки, вы должны предоставить флаги fstream :: in | fstream :: out | fstream :: trunc в вызове open (или конструктора ). Так как файл еще не существует, усечение файла до нуля байтов не представляет никакой драмы.

Вы можете захотеть получить ошибку при открытии несуществующего файла при указании only ios :: in , так как вы никогда не сможете читать из stream, поэтому ранний сбой в этом случае предотвратит неожиданные сбои в дальнейшем.

9
ответ дан 4 December 2019 в 21:08
поделиться
#include <fstream> 

ofstream out("test", ios::out);
if(!out)
{
    cout << "Error opening file.\n";
    return 1;
}

ifstream in("test", ios::in);
if(!in)
{
    cout << "Error opening file.\n";
    return 1;
}

При возникновении ошибки выводится сообщение и возвращается единица (1). Однако можно скомпилировать и выполнить просто ofstream out("test", ios::out); и ifstream in("test", ios::in); без каких-либо ошибок. В любом случае создается файл test.

1
ответ дан 4 December 2019 в 21:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: