Narzędzia użytkownika

Narzędzia witryny


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.

Proste operacje wejścia i wyjścia plikowego

Użycie obiektu klasy //ofstream//
ofstream fileOut;
fileOut.open("plik.txt");

lub

ofstream fileOut("plik.txt");

Ponieważ klasa ofstream jest klasa pochodna ostream, możemy używać metod z jej klasy bazowej np:

fileOut << "przykladowe dane";
fileOut.close();                  //zamkniecie strumienia
Użycie obiektu klasy //istream//
ifstream fileIn;
fileIn.open("plik.txt");

lub

ifstream fileIn("plik.txt");

Ponieważ klasa ifstream jest klasa pochodna istream, możemy używać metod z jej klasy bazowej np:

string line;
getline(fileIn, line);            //wczytanie linii z pliku
fileOut.close();                  //zamkniecie strumienia

Kontrola strumienia plikowego

Aby sprawdzić czy plik został otwarty i czy nie było próby otwarcia pliku z zastosowaniem nieodpowiedniego trybu korzystamy z:

fileIn.open("dane.txt");
if(!fileIn.is_open())
{
       //plik nie został otwarty
}

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:

ios_base::out | ios_base::trunc

a dla klasy iostream :

ios_base::in

. 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:

ofstream fileOut("dane.txt", ios_base::out | ios_base::app);

lub

ofstream fileOut;
fileOut.open("dane.txt", ios_base::out | ios_base::app);

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():

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 

Przyklad:

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)

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