Č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 tellp
viz 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.