8.5. Ověřování stavu I/O

Časová náročnost
Časová náročnost: 7 minut

I/O systém jazyka C++ udržuje stavovou informaci o každém výsledku I/O operace. Aktuální stav I/O proudu je popsán v následujících stavech:

Existují dva způsoby jak tuto informaci získat:

upozornění
  1. Pomocí funkce rdstate(), která má následující syntaxi:
    iostate rdstate();
    
    
    

    Vrací aktuální stav chybového příznaku.

  2. Použitím některé z následujících funkcí:
    bool bad(); // vrací true, je-li nastaven badbit
    bool eof(); // vrací true, pokud byl dosažen konec souboru
    bool fail(); // vrací true, je-li nastaven failbit
    bool good(); // vrací true, pokud se nevyskytly chyby
    
    
    

Když se objeví chyba, můžeme se pokusit odstranit její následky, než bude program pokračovat. K tomuto účelu slouží funkce clear() a má následující syntaxi:
void clear(iostate příznak=ios::goodbit);


Pokud je příznak nastaven na goodbit, jsou všechny chybové příznaky zrušeny. Jinak nastaví příznaky do požadovaného nastavení.

Následující program zobrazuje textový soubor a pro zobrazení chyb používá funkci good(). Název souboru je opět čten jako argument příkazové řádky.

src/8_5.cpp
Příklad 8.5.
#include <iostream.h>
#include <fstream.h>

int main(int argc, char *argv[])
{
  char ch;

  if(argc!=2) {
    cout << "Zadejte: 8_5 nazev souboru\n";
    return 1;
  }

  ifstream in(argv[1]);

  if(!in) {
    cout << "Nelze otevrit soubor\n";
    return 1;
  }

  while(!in.eof()) { 
    in.get(ch);
    if(!in.good() && !in.eof()) {
      cout << "I/O chyba\n";
      return 1;
    }
    cout << ch;
  }

  in.close();

  return 0;
}