C ++ ifStream do czytania plików

C ++ ifStream do czytania plików
IfStream oznacza strumień plików wejściowych. „Wejście” odnosi się do znaków z pliku wchodzącego do uruchomionego programu. Istnieje również termin C ++, Ofstream, który oznacza strumień plików wyjściowych. Jednak ten artykuł koncentruje się na ifstream. IfStream jest klasą C ++, do obsługi sekwencji bajtów w komputerze, który pochodzi z pliku na dysku, i wchodzi do uruchomionego programu. IfStream jest w bibliotece (nagłówku), fstream, który musi zostać uwzględniony w programie kodu źródłowego.

Program C ++ do korzystania z klasy ifStream powinien zacząć się następująco:

#włączać
#włączać
za pomocą przestrzeni nazw Std;

Pierwsza linia zawiera nagłówek, który ma definicję klasy ifstream. Druga linia zawiera nagłówek iostream, który ma obiekt Cout do drukowania wyjścia na terminalu (konsolę). Trzeci wiersz jest stwierdzeniem, a nie dyrektywa. Standardowa przestrzeń nazw to każda nazwa, a następnie „STD:;”.

W tym artykule wyjaśniono użycie klasy ifStream nagłówka fstream, aby obsłużyć dane wejściowe z pliku w dysku do uruchomionego programu. Wejście to znaki sekwencji, które przechodzą do bufora w pamięci przed osiągnięciem programu. Innymi słowy, ten artykuł wyjaśnia, jak odczytać plik tekstowy z dysku, w C++.

Tworzenie obiektu ifstream

Aby odczytać zawartość pliku na dysku, obiekt IfStream musi zostać utworzony instancją z klasy ifStream. Konstruktory powszechnie stosowane przez programistów anglosaskich (w tym zachodniej Europy) to:

basic_ifstream ();
jawne podstawowe_ifstream (const char* s, ios_base :: openMode Mode = ios_base :: in);
I
jawne podstawowe_ifstream (const String & s, ios_base :: OpenMode Mode = ios_base :: in);

Prefiks „Basic_” można pominąć dla wszystkich trzech składni. Użycie pierwszej składni tutaj zostanie zilustrowane w następnej sekcji. W drugiej składni pierwszym argumentem jest string literał lub tablica znaków kończących się w „\ 0”. Ten ciąg jest ścieżką katalogu i nazwy pliku, e.G. „DIR1/TXTFILE.txt ”, zakładając, że program znajduje się w katalogu domowym/użytkownika. W przypadku drugiej składni pierwszy argument jest taki sam jak pierwszy argument poprzedniej składni, ale jest to ciąg klasy String (nagłówek). W obu składniach drugim argumentem powinien być „iOS_Base :: w”, gdzie „w” środkach do czytania (wejście).

Ilustracja

Oświadczenie budowlane dla drugiej składni jest następujące:

ifStream IFS = ifStream ("Dir1/txtFile.txt ", ios_base :: in);

Nazwa pliku, którego treść ma być odczytana, brzmi: „TXTFILE.tekst". Po tej instrukcji plik „TXTFILE.txt ”jest uważany za otwarty w programie działającym. Po otwarciu pliku sekwencja kolejnych znaków, które reprezentują plik, jest w pamięci do kontroli bufora.

Segment kodu konstrukcyjnego dla trzeciej składni to:

String str = "dir1/txtFile.tekst";
ifStream ifs = ifStream (str, ios_base :: in);

W każdej sytuacji IFS jest obiektem ifstream otwartego pliku. W przypadku typu ciągu nie zapomnij uwzględnić klasy String (nagłówka) do programu w następujący sposób:

#włączać

Otwieranie pliku

Mówi się, że plik jest otwarty, gdy sekwencja kolejnych znaków pliku reprezentująca plik jest w pamięci do kontroli bufora. Druga i trzecia składnia konstrukcyjne powyżej otwierają plik do odczytu, ale pierwsza składnia nie. Oznacza to, że druga i trzecia składnia dokonują instancji obiektu ifstream i otwieranie pliku. Obiekt IFS może zostać utworzony z klasy ifStream za pomocą pierwszej składni z instrukcją:

ifStream ifs;

W takim przypadku obiekt pliku został utworzony, ale plik nie został jeszcze otwarty. Aby otworzyć plik do odczytu, należy użyć funkcji otwartego członka klasy ifStream. Metody przeciążone otwarte () powszechnie stosowane przez programistów anglosaskich (w tym zachodniej Europy) to:

void Open (const char* s, ios_base :: openMode Mode = ios_base :: in);
void Open (const String & s, ios_base :: OpenMode Mode = ios_base :: in);

Zauważ, że stwierdzenie budowlane „ifstream ifs;” nie wspomina żadnego pliku na dysku. I tak pierwsze i drugie argumenty tych funkcji otwartego () mają takie same znaczenie jak odpowiednio dla drugiej i trzeciej składni konstrukcyjnych powyżej.

Ilustracja

Zastosowanie funkcji pierwszego członka otwartego () tutaj (w tej sekcji) można zilustrować w następujący sposób:

ifStream ifs;
const char* str = "dir1/txtFile.tekst";
ifs.Open (str, ios_base :: in);

Zastosowanie funkcji drugiego członka Open () tutaj (w tej sekcji) można zilustrować w następujący sposób:

ifStream ifs;
String str = "dir1/txtFile.tekst";
ifs.Open (str, ios_base :: in);

Różnica w dwóch segmentach kodu to sposób, w jaki konstruuje się ciąg ścieżki i nazwy pliku.

Czy plik został otwarty?

Mówi się, że plik jest otwarty, gdy sekwencja kolejnych znaków pliku reprezentująca plik jest w pamięci dla kontroli bufora. Co jeśli ścieżka i/lub nazwa pliku była błędna? Co jeśli plik nie można otworzyć, ponieważ dysk był zły, a jego sektory nie można odczytać? Wskazane jest, aby zawsze sprawdzać, czy plik został otwarty za pomocą składni:

bool is_open () const;

is_open () jest funkcją członkowską klasy ifStream. Zwraca prawdę, jeśli plik został pomyślnie otwarty, a w przeciwnym razie fałsz. Poniższy segment kodu ilustruje użycie tej funkcji członka:

ifStream ifs;
const char* str = "dir1/txtFile.tekst";
ifs.Open (str, ios_base :: in);
if (ifs.is_open () == true)
Cout << "File is opened." << endl;
w przeciwnym razie
Cout << "File could not be open!" << endl;

Wyjście powinno być:

Plik jest otwarty.

Zamknięcie pliku

Plik powinien zostać zamknięty po otwarciu. Działanie zamykające zatrzymuje bufor w pamięci, uwalniając przestrzeń pamięci na inne działania. Łamie również połączenie wykonane z plikiem na dysku. ifStream ma funkcję członka blisko (), aby zamknąć otwarty plik. Składnia to:

void Close ();

Poniższy segment kodu ilustruje jego użycie:

ifStream IFS = ifStream ("Dir1/txtFile.txt ", ios_base :: in);
if (ifs.is_open () == true)
/* Zrób coś z otwartym plikiem tutaj. */
ifs.zamknąć();
Cout << "Opened File has been closed." << endl;

w przeciwnym razie
Cout << "File could not be open!" << endl;

Wyjście to:

Otwarty plik został zamknięty.

Plik powinien być używany, gdy programista jest pewien, że został otwarty, a następnie zamknięty.

Czytanie postaci jeden po drugim

ifStream ma funkcję członka, której składnią jest:

Basic_istream& Get (char_type i c);

Kiedy otrzyma następny znak, umieszcza ją w zmiennej C i zwraca obiekt IfStream odziedziczony po podstawowej. Wewnętrzny wskaźnik ifstream wskazuje na następną postać do następnego czytania. Po osiągnięciu końca pliku, zwrócony obiekt jest przekonwertowany na false.

Poniższy segment kodu odczytuje wszystkie znaki w pliku jeden po drugim i wysyła każdy do terminala (konsolę):

Char C;
While (ifs.Get (c))
Cout << c;

C należy najpierw zadeklarować. C jest argumentem get (), który jest funkcją członkowską obiektu ifstream. Jedyne proste stwierdzenie (cout << c;) of the while compound statement sends a copy of the character to the output.

Zamiast wysyłać znaki do wyjścia, można je wysłać do obiektu ciągów, tworząc długi ciąg w następujący sposób:

Char C;
string str;
While (ifs.Get (c))
str.push_back (c);

W takim przypadku nagłówek sznurka (biblioteka) musi zostać włączony do programu.

Poniższy program odczytuje całą zawartość pliku i wyświetla go:

#włączać
#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()

ifStream IFS = ifStream ("Dir1/txtFile.txt ", ios_base :: in);
if (ifs.is_open () == true)
Char C;
string str;
While (ifs.Get (c))
str.push_back (c);
Cout << str<< endl;
ifs.zamknąć();
Cout << "Opened File has been closed." << endl;

w przeciwnym razie
Cout << "File could not be open!" << endl;
powrót 0;

Wniosek

Klasa ifstream nagłówka fstream obsługuje dane wejściowe z pliku z dysku do uruchomionego programu. Aby utworzyć obiekt ifStream, użyj dowolnej składni:

basic_ifstream ();
jawne podstawowe_ifstream (const char* s, ios_base :: openMode Mode = ios_base :: in);
jawne podstawowe_ifstream (const String & s, ios_base :: OpenMode Mode = ios_base :: in);

Jeśli używana jest pierwsza składnia, obiekt nadal musi zostać otwarty, z dowolną z następujących składni funkcji członka:

void Open (const char* s, ios_base :: openMode Mode = ios_base :: in);
void Open (const String & s, ios_base :: OpenMode Mode = ios_base :: in);

Aby wiedzieć, czy plik zostanie pomyślnie otwarty, użyj składni funkcji członka:

bool is_open () const;

Obiekt ifstream musi być zamknięty po użyciu.

Aby odczytać postacie jeden po drugim, użyj w pętli, składnię funkcji członka:

Basic_istream& Get (char_type i c);