Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Funkcje składowe strumienia wyjściowego mają trzy typy: te, które są równoważne manipulatorom, tym, które wykonują niesformatowane operacje zapisu, oraz te, które w przeciwnym razie modyfikują stan strumienia i nie mają równoważnego manipulatora ani operatora wstawiania. W przypadku sekwencyjnych, sformatowanych danych wyjściowych można używać tylko operatorów wstawiania i manipulatorów. W przypadku danych wyjściowych dysku binarnego z dostępem losowym należy użyć innych funkcji członkowskich z operatorami wstawiania lub bez nich.
Otwarta funkcja strumieni wyjściowych
Aby użyć strumienia plików wyjściowych (ofstream), musisz skojarzyć ten strumień z określonym plikiem dysku w konstruktorze open lub funkcji. Jeśli używasz funkcji, możesz ponownie użyć open tego samego obiektu strumienia z serią plików. W obu przypadkach argumenty opisujące plik są takie same.
Po otwarciu pliku skojarzonego ze strumieniem wyjściowym zazwyczaj określasz flagę open_mode . Można połączyć te flagi, które są zdefiniowane jako moduły wyliczania w ios klasie, z operatorem bitowym OR (|). Zobacz ios_base::openmode listę modułów wyliczania.
Trzy typowe sytuacje strumienia wyjściowego obejmują opcje trybu:
Tworzenie pliku. Jeśli plik już istnieje, stara wersja zostanie usunięta.
ofstream ofile("FILENAME"); // Default is ios::out ofstream ofile("FILENAME", ios::out); // Equivalent to aboveDołączanie rekordów do istniejącego pliku lub tworzenie go, jeśli nie istnieje.
ofstream ofile("FILENAME", ios::app);Otwieranie dwóch plików ( po jednym naraz) na tym samym strumieniu.
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.
Funkcja put
Funkcja put zapisuje jeden znak do strumienia wyjściowego. Następujące dwie instrukcje są domyślnie takie same, ale drugi ma wpływ na argumenty formatu strumienia:
cout.put('A');
// Exactly one character written
cout <<'A'; // Format arguments 'width' and 'fill' apply
Funkcja write
Funkcja write zapisuje blok pamięci w strumieniu plików wyjściowych. Argument length określa liczbę zapisanych bajtów. W tym przykładzie tworzony jest strumień plików wyjściowych i zapisuje w niej wartość binarną Date 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 );
}
Funkcja write nie zatrzymuje się, gdy osiągnie NULL znak, więc pełną strukturę klas jest zapisywana. Funkcja przyjmuje dwa argumenty: char wskaźnik i liczbę znaków do zapisu. Zwróć uwagę na wymagane rzutowanie przed char * adresem obiektu struktury.
Funkcje wyszukiwania i tellp
Strumień plików wyjściowych przechowuje wewnętrzny wskaźnik wskazujący położenie, w którym dane mają być zapisywane dalej. Funkcja seekp składowa ustawia ten wskaźnik, a tym samym udostępnia dane wyjściowe pliku dysku z dostępem losowym. Funkcja tellp składowa zwraca położenie pliku. Przykłady użycia strumienia wejściowego równoważnego elementom seekp i tellpmożna znaleźć w temacie The and Functions (Funkcje i seekg ).tellg
Funkcja zamykania strumieni wyjściowych
Funkcja close składowa zamyka plik dysku skojarzony ze strumieniem plików wyjściowych. Plik musi zostać zamknięty, aby ukończyć wszystkie dane wyjściowe dysku. W razie potrzeby destruktor zamyka plik, ale możesz użyć ofstream funkcji, close jeśli musisz otworzyć inny plik dla tego samego obiektu strumienia.
Destruktor strumienia wyjściowego automatycznie zamyka plik strumienia tylko wtedy, gdy konstruktor lub open funkcja składowa otworzyła plik. Jeśli przekażesz konstruktor deskryptora pliku dla już otwartego pliku lub użyjesz attach funkcji składowej, musisz jawnie zamknąć plik.
Funkcje przetwarzania błędów
Użyj tych funkcji członkowskich, aby przetestować błędy podczas zapisywania w strumieniu:
| Funkcja | Wartość zwracana |
|---|---|
bad |
Zwraca wartość true , jeśli wystąpił nieodwracalny błąd. |
fail |
Zwraca wartość true , jeśli wystąpił nieodwracalny błąd lub warunek "oczekiwany", taki jak błąd konwersji, lub jeśli plik nie zostanie znaleziony. Przetwarzanie może być często wznawiane po wywołaniu metody clear z argumentem zero. |
good |
Zwraca wartość true , jeśli nie ma warunku błędu (nieodwracalnego lub w inny sposób), a flaga końca pliku nie jest ustawiona. |
eof |
Zwraca warunek true końca pliku. |
clear |
Ustawia stan błędu wewnętrznego. Jeśli jest wywoływana z argumentami domyślnymi, usuwa wszystkie bity błędów. |
rdstate |
Zwraca bieżący stan błędu. |
Operator ! jest przeciążony, aby wykonać tę samą funkcję co fail funkcja. W ten sposób wyrażenie:
if(!cout)...
jest odpowiednikiem:
if(cout.fail())...
Operator void*() jest przeciążony, aby był przeciwieństwem ! operatora; w ten sposób wyrażenie:
if(cout)...
jest równe:
if(!cout.fail())...
Operator void*() nie jest równoważny, good ponieważ nie testuje końca pliku.