W tym artykule pokażemy, jak czytać i zapisywać do pliku w języku programowania C++ na kilku przykładach. Aby zrozumieć operacje na plikach C++, takie jak odczyt i zapis, musimy najpierw zrozumieć pojęcie strumienia w C++.
Co to jest strumień?
Strumień to po prostu przepływ danych lub znaków. Istnieją dwa rodzaje strumieni: strumienie wejściowe i strumienie wyjściowe. Strumień wejściowy służy do odczytywania danych z zewnętrznego urządzenia wejściowego, takiego jak klawiatura, natomiast strumień wyjściowy służy do zapisywania danych na zewnętrznym urządzeniu wyjściowym, takim jak monitor. Plik można traktować zarówno jako źródło wejściowe, jak i wyjściowe.
W C++ używamy strumienia do wysyłania lub odbierania danych do lub z zewnętrznego źródła.
Możemy użyć wbudowanych klas, aby uzyskać dostęp do strumienia wejścia/wyjścia, tj. ios.
Oto hierarchia klas strumieni języka programowania C++:
Obiekty cin i cout służą odpowiednio do odczytywania danych z klawiatury i wyświetlania danych wyjściowych na monitorze. Ponadto ifstream, co oznacza strumień pliku wejściowego, służy do odczytywania strumienia danych z pliku, a ofstream, co oznacza strumień pliku wyjściowego, służy do zapisywania strumienia danych do pliku.
Plik iostram.h zawiera wszystkie wymagane standardowe klasy strumieni wejścia/wyjścia w języku programowania C++.
Przykłady
Teraz, gdy znasz już podstawy strumieni, omówimy następujące przykłady, które pomogą Ci lepiej zrozumieć operacje na plikach w C++:
- Przykład 1: Otwórz i zamknij plik
- Przykład 2: Napisz do pliku
- Przykład 3: Czytaj z pliku
- Przykład 4: Odczytywanie i zapisywanie do pliku
- Przykład 5: Odczyt i zapis do pliku binarnego
Przykład 1: Otwórz i zamknij plik
W tym przykładowym programie zademonstrujemy, jak otworzyć/utworzyć plik i jak go zamknąć w C++. Jak widać w poniższym programie, zawarliśmy bibliotekę wymaganą do operacji na plikach.
Aby otworzyć i zamknąć plik, potrzebujemy obiektu ofstream. Następnie, aby odczytać lub zapisać do pliku, musimy go otworzyć. W wierszu numer 1 zamieściliśmy plik nagłówkowy fstream, dzięki czemu możemy uzyskać dostęp do klasy ofstream.
Zadeklarowaliśmy myFile_Handler jako obiekt ofstream wewnątrz funkcji main. Następnie możemy użyć funkcji open(), aby utworzyć pusty plik i funkcji close(), aby zamknąć plik.
#włączaćza pomocą przestrzeń nazwgodziny;
intGłówny()
{
ofstream myFile_Handler;
// Plik Otwórz
myFile_Handler.otwarty(„Plik_1.txt”);
// Zamknij plik
myFile_Handler.blisko();
powrót 0;
}
Teraz skompilujemy program i sprawdzimy wynik. Jak widać w oknie wyjściowym poniżej, plik File_1.txt został utworzony po uruchomieniu programu. Rozmiar pliku wynosi zero, ponieważ nie zapisaliśmy w nim żadnej treści.
Przykład 2: Napisz do pliku
W poprzednim przykładowym programie pokazaliśmy, jak otworzyć plik i jak go zamknąć. Teraz pokażemy, jak napisać coś w pliku.
Możemy pisać do pliku za pomocą operatora wstawiania strumienia, tj.<<. In this program, we have used the file handler and insertion operator to write two lines in the file. The insertion operator (<<) indicates that we are inserting the string into the output file stream object.
#włączaćza pomocą przestrzeń nazwgodziny;
intGłówny()
{
ofstream myFile_Handler;
// Plik Otwórz
myFile_Handler.otwarty(„Plik_1.txt”);
// Zapisz do pliku
myFile_Handler<< „To jest przykładowy plik testowy. ' <<koniec;
myFile_Handler<< „To jest druga linia akt. ' <<koniec;
// Zamknij plik
myFile_Handler.blisko();
powrót 0;
}
Teraz skompilujemy powyższy program i wykonamy go. Jak widać poniżej, pomyślnie zapisaliśmy się do pliku File_1.txt.
Przykład 3: Czytaj z pliku
W poprzednich przykładach pokazaliśmy, jak zapisywać zawartość do pliku. Teraz przeczytajmy zawartość pliku, który utworzyliśmy w Przykładzie 2 i wyświetlmy zawartość na standardowym urządzeniu wyjściowym, czyli monitorze.
Używamy funkcji getline(), aby odczytać całą linię z pliku, a następnie cout, aby wydrukować linię na monitorze.
#włączać#włączać
#włączać
za pomocą przestrzeń nazwgodziny;
intGłówny()
{
ifstream myFile_Handler;
ciąg myLine;
// Plik Otwórz w trybie odczytu
myFile_Handler.otwarty(„Plik_1.txt”);
Jeśli(myFile_Handler.jest otwarte())
{
// Czytaj dalej plik
podczas(getline(myFile_Handler, myLine))
{
// wypisz linię na standardowym wyjściu
koszt <<moja linia<<koniec;
}
// Zamknij plik
myFile_Handler.blisko();
}
w przeciwnym razie
{
koszt << „Nie można otworzyć pliku!”;
}
powrót 0;
}
Teraz wydrukujemy zawartość pliku File_1.txt za pomocą następującego polecenia: cat File_1.txt. Gdy skompilujemy i uruchomimy program, jasne jest, że dane wyjściowe są zgodne z zawartością pliku. Dlatego pomyślnie odczytaliśmy plik i wydrukowaliśmy zawartość pliku na monitorze.
Przykład 4: Odczytywanie i zapisywanie do pliku
Do tej pory pokazaliśmy, jak otwierać, czytać, pisać i zamykać plik. W C++ możemy jednocześnie czytać i zapisywać do pliku. Aby zarówno czytać, jak i pisać do pliku, musimy pobrać obiekt fstream i otworzyć plik w trybie ios::in i ios::out.
W tym przykładzie najpierw zapisujemy zawartość do pliku. Następnie odczytujemy dane z pliku i wyświetlamy je na monitorze.
#włączać#włączać
#włączać
za pomocą przestrzeń nazwgodziny;
intGłówny()
{
fstream myFile_Handler;
ciąg myLine;
// Plik Otwórz
myFile_Handler.otwarty(„Plik_1.txt”ios::w |ios::na zewnątrz);
// Sprawdź, czy plik został otwarty
Jeśli(!myFile_Handler)
{
koszt << „Plik się nie otworzył!”;
Wyjście(1);
}
// Zapisz do pliku
myFile_Handler<< „1. To jest kolejny przykładowy plik testowy. ' <<koniec;
myFile_Handler<< „2. To jest druga linia pliku. ' <<koniec;
myFile_Handler.szukać(ios::błagać);
// Przeczytaj plik
Jeśli(myFile_Handler.jest otwarte())
{
// Czytaj dalej plik
podczas(getline(myFile_Handler, myLine))
{
// wypisz linię na standardowym wyjściu
koszt <<moja linia<<koniec;
}
// Zamknij plik
myFile_Handler.blisko();
}
w przeciwnym razie
{
koszt << „Nie można otworzyć pliku!”;
}
myFile_Handler.blisko();
powrót 0;
}
Teraz skompilujemy i uruchomimy program.
Przykład 5: Odczyt i zapis do pliku binarnego
W tym przykładzie zadeklarujemy klasę, a następnie zapiszemy obiekt do pliku binarnego. Aby uprościć ten przykład, zadeklarowaliśmy klasę Employee z publiczną zmienną emp_id. Następnie odczytamy plik binarny i wydrukujemy dane wyjściowe na monitorze.
#włączać#włączać
za pomocą przestrzeń nazwgodziny;
klasaPracownik
{
publiczny:
intemp_id;
};
intGłówny()
{
ofstream binOutFile_Handler;
ifstream binInFile_Handler;
Pracownik empObj_W, empObj_R;
// Plik Otwórz
binOutFile_Handler.otwarty(„pracownik.dat”ios::na zewnątrz |ios::dwójkowy);
// Sprawdź, czy plik został otwarty
Jeśli(!binOutFile_Handler)
{
koszt << „Plik się nie otworzył!”;
Wyjście(1);
}
// Zainicjuj empObj_W
empObj_W.emp_id = 1512;
// Zapisz do pliku
binOutFile_Handler.pisać((zwęglać *) &empObj_W,rozmiar(Pracownik));
binOutFile_Handler.blisko();
Jeśli(!binOutFile_Handler.dobry())
{
koszt << 'Wystąpił błąd podczas zapisu pliku binarnego!' <<koniec;
Wyjście(2);
}
// Teraz przeczytajmy plik worker.dat
binInFile_Handler.otwarty(„pracownik.dat”ios::w |ios::dwójkowy);
// Sprawdź, czy plik został otwarty
Jeśli(!binInFile_Handler)
{
koszt << „Plik się nie otworzył!”;
Wyjście(3);
}
// Odczytaj zawartość pliku binarnego
binInFile_Handler.czytać((zwęglać *) &empObj_R,rozmiar(Pracownik));
binInFile_Handler.blisko();
Jeśli(!binInFile_Handler.dobry())
{
koszt << 'Wystąpił błąd podczas odczytu pliku binarnego!' <<koniec;
Wyjście(4);
}
// Wydrukuj wynik empObj_R
koszt << „Dane pracownika:” <<koniec;
koszt << 'Numer identyfikacyjny pracownika : ' <<empObj_R.emp_id <<koniec;
powrót 0;
}
Wniosek
Pliki służą głównie do przechowywania danych i odgrywają ważną rolę w programowaniu w świecie rzeczywistym. W tym artykule pokazaliśmy, jak korzystać z różnych operacji na plikach w języku programowania C++ na kilku przykładach. Ponadto pokazaliśmy, jak odczytywać i zapisywać dane zarówno w plikach tekstowych, jak i binarnych.