Jak czytać i pisać do pliku w C++

How Read Write File C



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.