Sdílet prostřednictvím


Členské funkce datového proudu výstupního souboru

Členské funkce výstupního streamu mají tři typy: ty, které jsou ekvivalentní manipulátorům, těm, které provádějí neformátované operace zápisu, a ty, které jinak upravují stav datového proudu a nemají žádný ekvivalentní manipulátor nebo operátor vložení. Pro sekvenční formátovaný výstup můžete použít pouze operátory vložení a manipulátory. Pro výstup binárního disku s náhodným přístupem použijete jiné členské funkce s operátory vložení nebo bez.

Otevřená funkce pro výstupní streamy

Chcete-li použít datový proud výstupního souboru (ofstream), musíte tento datový proud přidružit ke konkrétnímu souboru disku v konstruktoru open nebo funkci. Pokud funkci používáte open , můžete znovu použít stejný objekt streamu s řadou souborů. V obou případech jsou argumenty popisující soubor stejné.

Když otevřete soubor přidružený k výstupnímu streamu, obvykle zadáte open_mode příznak. Tyto příznaky můžete kombinovat, které jsou definovány jako enumerátory ve ios třídě, s bitovým operátorem OR ( | ). Podívejte ios_base::openmode se na seznam výčtů.

Tři běžné situace výstupního streamu zahrnují možnosti režimu:

  • Vytvoření souboru Pokud soubor již existuje, stará verze se odstraní.

    ofstream ofile("FILENAME");
    // Default is ios::out
    
    ofstream ofile("FILENAME", ios::out);
    // Equivalent to above
    
  • Připojení záznamů k existujícímu souboru nebo jeho vytvoření, pokud neexistuje.

    ofstream ofile("FILENAME", ios::app);
    
  • Otevření dvou souborů najednou ve stejném datovém proudu

    ofstream ofile();
    ofile.open("FILE1", ios::in);
    // Do some output
    ofile.close();    // FILE1 closed
    ofile.open("FILE2", ios::in);
    // Do some more output
    ofile.close();    // FILE2 closed
    // When ofile goes out of scope it is destroyed.
    

Funkci put

Funkce put zapíše jeden znak do výstupního datového proudu. Následující dva příkazy jsou ve výchozím nastavení stejné, ale druhý je ovlivněn argumenty formátu streamu:

cout.put('A');

// Exactly one character written
cout <<'A'; // Format arguments 'width' and 'fill' apply

Funkci write

Funkce write zapíše blok paměti do výstupního datového proudu souboru. Argument délka určuje počet zapsaných bajtů. Tento příklad vytvoří datový proud výstupního Date souboru a zapíše do ní binární hodnotu struktury:

// write_function.cpp
// compile with: /EHsc
#include <fstream>
using namespace std;

struct Date
{
   int mo, da, yr;
};

int main( )
{
   Date dt = { 6, 10, 92 };
   ofstream tfile( "date.dat" , ios::binary );
   tfile.write( (char *) &dt, sizeof dt );
}

Funkce write se nezastaví, když dosáhne znaku NULL , takže se zapíše kompletní struktura třídy. Funkce má dva argumenty: char ukazatel a počet znaků k zápisu. Všimněte si požadovaného přetypování před char * adresu objektu struktury.

Funkce seekp a tellp

Datový proud výstupního souboru uchovává interní ukazatel, který odkazuje na pozici, kde se mají data zapisovat dál. Členová seekp funkce nastaví tento ukazatel a poskytuje tak výstup souboru disku s náhodným přístupem. Členová tellp funkce vrátí pozici souboru. Příklady, které používají ekvivalenty seekp vstupního datového proudu, a tellpviz The seekg and tellg Functions.

Funkce close pro výstupní streamy

Členová close funkce zavře diskový soubor přidružený k výstupnímu datovému proudu souboru. Aby se dokončil výstup disku, musí být soubor zavřený. V případě potřeby ofstream destruktor zavře soubor za vás, ale funkci můžete použít close , pokud potřebujete otevřít jiný soubor pro stejný objekt streamu.

Destruktor výstupního datového proudu automaticky zavře soubor datového proudu pouze v případě, že konstruktor nebo open členská funkce soubor otevřela. Pokud předáte konstruktor popisovač souboru pro již otevřený soubor nebo použijete attach členská funkce, musíte soubor explicitně zavřít.

Funkce zpracování chyb

Pomocí těchto členských funkcí otestujte chyby při zápisu do datového proudu:

Function Vrácená hodnota
bad Vrátí true , pokud dojde k neopravitelné chybě.
fail Vrátí true , pokud existuje neopravitelná chyba nebo očekávaná podmínka, například chyba převodu nebo pokud soubor nebyl nalezen. Zpracování může často pokračovat po volání clear s nulovým argumentem.
good Vrátí true , pokud neexistuje žádný chybový stav (neobnovitelný nebo jinak) a příznak konce souboru není nastavený.
eof Vrátí true podmínku konce souboru.
clear Nastaví vnitřní chybový stav. Pokud je volána s výchozími argumenty, vymaže všechny chybové bity.
[rdstate](basic-ios-class.md#rdstate Vrátí aktuální stav chyby.

Operátor ! je přetížen tak, aby prováděl stejnou funkci jako fail funkce. Výraz tedy:

if(!cout)...

odpovídá:

if(cout.fail())...

Operátor void*() je přetížen tak, aby byl opakem operátoru ! , a proto výraz:

if(cout)...

je rovno:

if(!cout.fail())...

Operátor void*() není ekvivalentní good , protože neprovádí testování na konec souboru.

Viz také

Výstupní streamy