przejście do zawartości
zpr c++ quick reference
Narzędzia użytkownika
Zarejestruj się!
Zaloguj
Narzędzia witryny
Narzędzia
Pokaż stronę
Poprzednie wersje
Odnośniki
Ostatnie zmiany
Menadżer multimediów
Indeks
Zaloguj
Zarejestruj się!
Ostatnie zmiany
Menadżer multimediów
Indeks
Ślad:
strumienie_plikowe_fstream_ifstream_ofstream
Ta strona jest tylko do odczytu. Możesz wyświetlić źródła tej strony ale nie możesz ich zmienić.
===== STRUMIENIE PLIKOWE: fstream, ifstream, ofstream ===== Autor: Mateusz Kołodziejczyk ---- Klasa //ifstream// służy do obsługi wejścia plikowego, klasa //ofstream// do obsługi wyjścia plikowego a klasa //fstream// umożliwia jednoczesne operacje wejścia i wyjścia plikowego. Znajdują się w pliku nagłówkowym //fstream// i wywodzą się one z klas zdefiniowanych w pliku nagłówkowym //iostream//, a więc ich obiekty mogą korzystać z metod tych klas. ==== Proste operacje wejścia i wyjścia plikowego ==== == Użycie obiektu klasy //ofstream// == <code c++> ofstream fileOut; fileOut.open("plik.txt"); </code> lub <code c++> ofstream fileOut("plik.txt"); </code> Ponieważ klasa //ofstream// jest klasa pochodna //ostream//, możemy używać metod z jej klasy bazowej np: <code c++> fileOut << "przykladowe dane"; fileOut.close(); //zamkniecie strumienia </code> == Użycie obiektu klasy //istream// == <code c++> ifstream fileIn; fileIn.open("plik.txt"); </code> lub <code c++> ifstream fileIn("plik.txt"); </code> Ponieważ klasa //ifstream// jest klasa pochodna //istream//, możemy używać metod z jej klasy bazowej np: <code c++> string line; getline(fileIn, line); //wczytanie linii z pliku fileOut.close(); //zamkniecie strumienia </code> ==== Kontrola strumienia plikowego ==== Aby sprawdzić czy plik został otwarty i czy nie było próby otwarcia pliku z zastosowaniem nieodpowiedniego trybu korzystamy z: <code c++> fileIn.open("dane.txt"); if(!fileIn.is_open()) { //plik nie został otwarty } </code> ==== Tryby otwarcia pliku ==== W celu określenia trybu możemy wybrać przynajmniej jedna ze stałych zdefiniowanych w klasie //ios_base//. Konstruktory obiektów powyższych klas i metoda //open()// posiadają jeszcze jeden argument, który określa tryb otwarcia pliku - dla klasy //ofstream// domyślną wartością jest: <code c++ >ios_base::out | ios_base::trunc</code> a dla klasy //iostream// : <code c++>ios_base::in</code>. Jeśli chodzi o konstruktor klasy //fstream// to nie posiada on domyślnej wartości trybu. ^Stała ^Znaczenie ^ ^ ios_base::in | Otwórz plik do odczytu | ^ ios_base::out | Otwórz plik do zapisu | ^ ios_base::ate | Po otwarciu pliku ustaw się na jego końcu | ^ ios_base::app | Dołącz na koniec pliku | ^ ios_base::trunc | Zredukuj rozmiar pliku do zera, jeśli istnieje | ^ ios_base::binary | Plik binarny | Można łączyć tryby za pomoca operatora bitowej aternatywy "|". Przykład: <code c++> ofstream fileOut("dane.txt", ios_base::out | ios_base::app); </code> lub <code c++> ofstream fileOut; fileOut.open("dane.txt", ios_base::out | ios_base::app); </code> ==== Dostęp swobodny ==== Dostęp swobodny oznacza możliwość przemieszczania się w dowolne miejsce pliku bez przymusu przesuwania się po kolei po jego zawartości. Służą do tego metody: * seekg() - przesuwa wskaźnik wejściowy w miejsce podane wewnątrz pliku (możemy korzystać z obiektami klasy //ifstream//) * seekp() - przesuwa w podane miejsce wewnątrz pliku wskaźnik wyjściowy (możemy korzystać z obiektami klasy //ofstream//) Obie używamy, gdy mamy do czynienia z obiektami klasy //fstream// Prototypy seekg(): <code c++> istream & seekg(streamoff, ios_base::seekdir); // określenie pozycji w pliku, która jest wyrażona w bajtach jako przesunięcie względem miejsca w pliku określonego przez 2. argument istream & seekg(streampos); // określenie pozycji w pliku wyrażonej w bajtach względem początku pliku </code> Przyklad: <code c++> ifstream fileIn("dane.txt"); fileIn.seekg(10, ios_base::beg); // przesuniecie o 10 bajtów od początku pliku fileIn.seekg(-10, ios_base::cur); // cofa o 10 bajtów względem aktualnej pozycji fileIn.seekg(0, ios_base::end); // idź na koniec pliku fileIn.seekg(80); // umieść wskaźnik na 81 bajcie (pierwszy bajt ma polozenie 0) </code> Podobna sytuacja ma miejsce, jeśli chodzi o prototypy metod //seekp()//. Istnieją również metody, które informują o aktualnym położeniu wskaźników w pliku: * tellg() - położenie wskaźnika wejściowego w pliku * tellp() - położenie wskaźnika wyjściowego w pliku W przypadku klasy //fstream// oba wskaźniki są przesuwane równorzędnie.
strumienie_plikowe_fstream_ifstream_ofstream.txt
· ostatnio zmienione: 2008/12/09 02:19 przez
couto
Narzędzia strony
Pokaż stronę
Poprzednie wersje
Odnośniki
Do góry