Narzędzia użytkownika

Narzędzia witryny


strumienie_plikowe_fstream_ifstream_ofstream

Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

strumienie_plikowe_fstream_ifstream_ofstream [2008/12/09 01:11]
couto utworzono
strumienie_plikowe_fstream_ifstream_ofstream [2008/12/09 02:19] (aktualna)
couto
Linia 1: Linia 1:
 ===== STRUMIENIE PLIKOWE: fstream, ifstream, ofstream ===== ===== 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. 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 ​===== +==== Proste operacje wejścia i wyjścia plikowego ==== 
-  ​- ​Użycie obiektu //​ofstream//​ +== Użycie obiektu ​klasy //​ofstream// ​== 
-''​ostream fileOut;''  ​ +<code c++> 
-''​fileOut.open("​plik.txt"​);​''​+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