Funkcje elementów członkowskich strumienia pliku danych wyjściowych
Funkcje składowe strumienia wyjściowego są trzy typy: te, które są równoważne manipulatory, tych, które wykonują niesformatowany operacji zapisu, a te, które w inny sposób zmodyfikować strumień Państwa i nie ma równoważne manipulator lub operatora wstawiania.Sekwencyjne, sformatowanych danych wyjściowych mogą używać tylko operatorów wstawiania i manipulatory.Dla wyjścia dysku binarne random access należy używać innych funkcji członka, z lub bez wstawiania operatorów.
Funkcji open dla strumieni danych wyjściowych
Aby użyć strumień wyjściowy plik (ofstream), należy skojarzyć strumienia z pliku na dysku określonego w konstruktorze lub otworzyć funkcji.Jeśli używasz Otwórz funkcji, można ponownie użyć tego samego obiektu stream z serii plików.W obu przypadkach opisu pliku argumenty są takie same.
Po otwarciu pliku skojarzonego z strumień wyjściowy można ogólnie określić open_mode flagi.Można połączyć te flagi, które są zdefiniowane jako moduły wyliczające w ios klasy z logiczną lub operatora (|).Zobacz ios_base::openmode listę moduły wyliczające.
Trzy typowe problemy strumienia wyjściowego obejmują opcje trybu:
Tworzenie pliku.Jeśli ten plik już istnieje, stara wersja zostanie usunięta.
ostream ofile( "FILENAME" ); // Default is ios::out ofstream ofile( "FILENAME", ios::out ); // Equivalent to above
Rekordy dołączane do istniejącego pliku lub jeśli nie istnieje możliwość utworzenia jednego.
ofstream ofile( "FILENAME", ios::app );
Otwarcie dwa pliki, jeden po drugim, na ten sam strumień.
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.
Funkcję put
Umieścić funkcja pisze o jeden znak do strumienia wyjściowego.Dwie poniższe instrukcje są takie same, domyślnie, ale drugi jest zagrożony argumenty format strumienia:
cout.put( 'A' ); // Exactly one character written
cout << 'A'; // Format arguments 'width' and 'fill' apply
Funkcja zapisu
Zapisu funkcja zapisuje blok pamięci do strumienia pliku wyjściowego.Długość argumentu określa liczbę zapisanych bajtów.W tym przykładzie tworzy strumień wyjściowy plik i zapisuje wartość binarna Date jej 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 );
}
Zapisu funkcja nie zatrzymuje się po osiągnięciu znak null tak napisane struktura klas kompletny.Funkcja przyjmuje dwa argumenty: char wskaźnika i liczby znaków do zapisu.Należy zwrócić uwagę wymagane oddanych do char * przed adresu obiektu struktury.
Funkcje seekp i tellp
Strumień wyjściowy plik utrzymuje wewnętrzny wskaźnik, który wskazuje miejsce, gdzie danych ma być napisane w najbliższy.seekp Funkcji składowej ustawia ten wskaźnik, a tym samym zapewnia dostępie losowym dysku pliku wyjściowego.tellp Funkcji składowej podaje położenie pliku.Do przykładów, które używają odpowiedniki strumień wejściowy do seekp i tellp, zobacz Funkcje seekg i tellg.
Funkcja close dla strumieni danych wyjściowych
Zamknąć funkcji składowej zamyka plik dysku skojarzonego z strumień wyjściowy plik.Plik musi zostać zamknięty do ukończenia wszystkich wyjścia dysku.W razie potrzeby, ofstream destruktora zamyka plik dla Ciebie, ale można użyć zamknąć działać, jeśli to konieczne jest otwarcie innego pliku dla tego samego obiektu strumienia.
Destruktora strumienia wyjściowego automatycznie zamyka strumienia pliku tylko wtedy, gdy konstruktora lub Otwórz funkcji składowej otworzył taki plik.W przypadku przekazania deskryptor pliku już otwartym pliku lub użyj Konstruktora dołączyć funkcji składowej jawnie musisz zamknąć plik.
Wystąpił błąd podczas przetwarzania funkcji
Używać tych funkcji elementów członkowskich do testowania błędy podczas zapisywania do strumienia:
Funkcja |
Wartość zwrócona |
---|---|
Zwraca true przypadku wystąpił nieodwracalny błąd. |
|
Zwraca true Jeśli wystąpił nieodwracalny błąd lub warunek "oczekiwane", na przykład błąd konwersji, lub jeśli plik nie zostanie znaleziony.Przetwarzanie często można wznowić po wywołaniu Wyczyść z argumentem zero. |
|
Zwraca true Jeśli nie ma żadnego warunku błędu (nieodwracalny lub inaczej) i nie jest ustawiona flaga końca pliku. |
|
Zwraca true pod warunkiem końca pliku. |
|
Ustawia stan wewnętrzny błąd.Jeśli wywołana z argumentami domyślne, czyści wszystkie bity błąd. |
|
Zwraca bieżący stan błędu. |
The ! do pełnią tę samą funkcję, co jest przeciążony operator się niepowodzeniem funkcji.Ten sposób wyrażenia:
if( !cout)...
jest równoważne:
if( cout.fail() )...
Void*() być przeciwieństwem jest przeciążony operator ! operatora; ten sposób wyrażenia:
if( cout)...
jest równa:
if( !cout.fail() )...
Void*() operator nie jest równoważne z dobre ponieważ nie testuje go na końcu pliku.