Wszystkie funkcje (metody) oraz zmienne (atrybuty) zdefiniowane są w klasie o nazwie $$ifstream$$, na podstawie której musimy utworzyć obiekt. Czytanie zawartości pliku można utożsamić z czytaniem danych z klawiatury. Należy tylko zmienić standardowe wejście z klawiatury na plik. Popatrzmy jeszcze raz, w jaki sposób czytamy dane z klawiatury:
cin>>zmienna;
gdzie $$cin$$ jest obiektem, który ma zdefiniowane niezbędne metody i atrybuty potrzebne do czytania z klawiatury. Czytanie pliku działa na takiej samej zasadzie. Różnica jest taka, że zamiast nazwy $$cin$$ wpisujemy własną, którą tworzymy w następujący sposób:
ifstream jakas_nazwa; //zamiast cin bedzie jakas_nazwa
jakas_nazwa.open("ścieżka do pliku (względna lub bezwzględna)");
Klasa $$ifsteram$$ ma zdefiniowane wszystkie elementy pozwalające czytać plik.
Jak mamy już obiekt, to możemy skorzystać z pierwszej jego funkcji, która określa fizyczny plik na dysku. W cudzysłowie podajemy ścieżkę do niego bezwzględną lub względną: bezwzględna ścieżka to cały adres do pliku np.: c:/dane/dane.txt, względna, to taka, która określa położenie pliku względem programu, np. jeśli program i plik z danymi znajdują się w tym samym miejscu, to wystarczy zapisać
jakas_nazwa.open("dane.txt");
Plik, który chcemy czytać, możemy zdefiniować od razu przy tworzeniu obiektu i pomijamy w tej sytuacji funkcję $$open$$:
ifstream jakas_nazwa("ścieżka do pliku");
Teraz, dane wczytujemy za pomocą konstrukcji:
jakas_nazwa>>zmienna;
Załóżmy, że mamy utworzony plik tekstowy dane.txt z zapisanymi w nim dwiema liczbami np. 23 i 12. Chcemy odczytać te liczby i wykonać na nich działanie dodawania. Dodatkowo, nasz program wykonywalny jest w tym samym folderze co plik dane.txt.
#include<iostream>
#include<fstream>
using namespace std;
int main()
{
int a, b;
ifstream odczyt("dane.txt");
odczyt>>a>>b;
cout<<"Suma wczytanych liczb wynosi: "<<a+b;
odczyt.close(); //zamknięcie pliku
return 0;
}
Do zamykania pliku służy funkcja $$close();$$.
Pamiętajmy, że jeśli jakiś plik otwieramy, to po zakończonej pracy musimy go zamknąć!! |
Cały plik możemy przeczytać na kilka sposobów.
#include<iostream>
#include<fstream>
using namespace std;
int main()
{
int a, b;
ifstream odczyt("dane.txt");
if(odczyt.is_open())
{
char znak;
while(odczyt>>znak) //dopóki jest co czytać
{
cout<<znak; //wypisz to co wczytałes z pliku
//lub wykonaj inną operację
}
}
else
cout<<"Nie udało się otworzyć pliku";
return 0;
}
#include<iostream>
#include<fstream>
using namespace std;
int main()
{
int a, b;
ifstream odczyt("dane.txt");
if(odczyt.is_open())
{
char wyraz[100];//maksymalnie 99 znaków
while(odczyt>>wyraz) //dopóki jest co czytać
{
cout<<wyraz<<" "; //wypisz to co wczytałes z pliku
//lub wykonaj inną operację
}
}
else
cout<<"Nie udało się otworzyć pliku";
return 0;
}
#include<iostream>
#include<fstream>
using namespace std;
int main()
{
int a, b;
ifstream odczyt("dane.txt");
if(odczyt.is_open())
{
char wiersz[10000];//maksymalnie 9999 znaków w wierszu
while(odczyt.getline(wiersz,10000)) //dopóki jest co czytać
{
cout<<wiersz<<endl; //wypisz to co wczytałes z pliku
//lub wykonaj inną operację
}
}
else
cout<<"Nie udało się otworzyć pliku";
return 0;
}