Operacje wejścia/wyjścia (odsłona druga) - pliki

Podobne dokumenty
Operacje wejścia/wyjścia odsłona pierwsza

Rzutowanie i konwersje

Programowanie w językach

Wyliczanie wyrażenia obiekty tymczasowe

Szablon klasy std::vector

Referencje do zmiennych i obiektów

Program dopisujący gwiazdkę na końcu pliku tekstowego o nazwie podanej przez uŝytkownika oraz wypisujący zawartość tego pliku.

Konstruktor kopiujacy

Wartości domyślne, przeciażenia funkcji

Wartości domyślne, przeciażenia funkcji

Pola i metody statyczne

Lista dwukierunkowa - przykład implementacji destruktorów

1 Pierwsze kroki w C++ cz.3 2 Obsługa plików

Operacje na plikach. Informatyka. Standardowe strumienie wejścia i wyjścia

Wprowadzenie do szablonów szablony funkcji

Język C++ wykład VIII

Wykład II. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Programowanie i struktury danych

Szablon klasy std::list

Spis treści OBSŁUGA PLIKÓW W JĘZYKU C++ Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF32

Wprowadzenie do szablonów szablony funkcji

Wejście wyjście strumieniowe

Programowanie w C++ Wykład 11. Katarzyna Grzelak. 21 maja K.Grzelak (Wykład 11) Programowanie w C++ 1 / 24

Przesłanianie nazw, przestrzenie nazw

Klasa iostream... 1 Klasy ofstream, ifstream Struktura FILE... 8

Techniki programowania INP001002Wl rok akademicki 2017/18 semestr letni. Wykład 5. Karol Tarnowski A-1 p.

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 5. Karol Tarnowski A-1 p.

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 15 kwietnia K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33

Programowanie w C++ Wykład 9. Katarzyna Grzelak. 14 maja K.Grzelak (Wykład 9) Programowanie w C++ 1 / 30

Pliki wykład 2. Dorota Pylak

C++ - [3-5] Pliki i strumienie w C++

Zajęcia nr 5 Algorytmy i wskaźniki. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Programowanie Procedurale. Pliki w języku C++

Programowanie obiektowe

Operacje na plikach (niskiego poziomu) < IO.H >

Wyjątki. Wyjątki. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Politechnika Wrocławska

Pliki wykład 2. Dorota Pylak

4. Wyrzuć wyjątek jeśli zmienna ist nie istnieje bloki: try, catch i wyrzucanie wyjątku

Pliki wykład. Dorota Pylak

Programowanie w C++ Wykład 12. Katarzyna Grzelak. 20 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 32

Klasa, metody, rozwijanie w linii

Wprowadzenie do programowania i programowanie obiektowe

Wykład 2 Operacje wejściawyjścia. Ewa Gajda

Pliki wykład 2 -przekazywanie strumieni do funkcji -funkcje get(char &) i getline(string)

Pliki wykład. Dorota Pylak

Wstęp do programowania obiektowego. Przekazywanie parametrów do funkcji w C++ Metody i funkcje operatorowe Strumienie: standardowe, plikowe, napisowe

Dziedziczenie & W slajdach są materiały zapożyczone z

Klasa, metody, rozwijanie w linii

PROE wykład 3 klasa string, przeciążanie funkcji, operatory. dr inż. Jacek Naruniec

Politechnika Poznańska Wydział Budowy Maszyn i Zarządzania. Programowanie systemów informatycznych laboratorium. Ćw. 3: Akwizycja danych. RS 232 cd.

Wykład :37 PP2_W9

Obiekty i metody stałe

Język C++ wykład VI. uzupełnienie notatek: dr Jerzy Białkowski. Programowanie C/C++ Język C++ wykład VI. dr Jarosław Mederski.

Język C++ Różnice między C a C++

Wstęp do Programowania 2

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

wykład IV uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C, a C++. wykład IV dr Jarosław Mederski Spis Język C++ - wstęp

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk. Wydział Inżynierii Metali i Informatyki Przemysłowej

Programowanie Obiektowe i C++

obiekty funkcyjne - funktory

Programowanie w C++ Wykład 13. Katarzyna Grzelak. 4 czerwca K.Grzelak (Wykład 13) Programowanie w C++ 1 / 26

Prof. Danuta Makowiec Instytut Fizyki Teoretycznej i Astrofizyki pok. 353, tel danuta.makowiec at gmail.com

Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

jest mocny, skoro da się w nim wyrazić nowe pojęcia; łatwiej przenieść go na nową platformę jest mniejszy.

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Programowanie obiektowe, wykład nr 7. Przegląd typów strukturalnych - klasy i obiekty - c.d.

Programowanie Obiektowew języku C++ Zadania L4

Szablony funkcji i szablony klas

Język C++ wykład VII. uzupełnienie notatek: dr Jerzy Białkowski. Programowanie C/C++ Język C++ wykład VII. dr Jarosław Mederski. Spis.

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

Programowanie w C++ Wykład 12. Katarzyna Grzelak. 28 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 27

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Wstęp do programowania obiektowego

Podstawy programowania. Wykład: 9. Łańcuchy znaków. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Dzisiejszy wykład. Klasa string. wersja prosta wersja ze zliczaniem odwołań. Wyjątki Specyfikator volatile Semafory

Operatory na rzecz typu TString

Biblioteka standardowa - operacje wejścia/wyjścia

Zajęcia nr 4 Programowanie obiektowe konstruktory. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Programowanie w C++ Wykład 11. Katarzyna Grzelak. 13 maja K.Grzelak (Wykład 11) Programowanie w C++ 1 / 30

Wstęp do programowania. Dariusz Wardecki, wyk. X

Zaawansowane programowanie w języku C++ Biblioteka standardowa

Funkcje zawarte w bibliotece < io.h >

Wyjątki (exceptions)

Referencje. Zasady zaliczeń. Zasady zaliczeń. Zasady zaliczeń. Zasady zaliczeń. Zaawansowane Programowanie Obiektowe. Informacje organizacyjne:

Programowanie w C++ Wykład 14. Katarzyna Grzelak. 3 czerwca K.Grzelak (Wykład 14) Programowanie w C++ 1 / 27

C++ - szablony. C++ - szablony. C++ - szablony. C++ - szablony SZABLONY SZABLONY FUNKCJI

Podstawy Programowania

C++ - szablony. C++ - szablony. C++ - szablony. C++ - szablony. C++ - szablony. C++ - szablony

Podstawy programowania w języku C++

PROE wykład 4 pozostałe operatory, forward declaration, dziedziczenie. dr inż. Jacek Naruniec

Programowanie 2. Język C++. Wykład 3.

tablica: dane_liczbowe

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 12. Karol Tarnowski A-1 p.

Funkcje zawarte w bibliotece < io.h >

Wstęp do Programowania 2

Hermetyzacja oraz pola i metody statyczne

Pytania sprawdzające wiedzę z programowania C++

Qt sygnały i sloty. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Wydział Elektroniki Politechnika Wrocławska

Pliki. Informacje ogólne. Obsługa plików w języku C

Transkrypt:

Operacje wejścia/wyjścia (odsłona druga) - pliki Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2005 2008 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu na temat programowania obiektowego. Jest on udostępniony pod warunkiem wykorzystania wyłacznie do własnych prywatnych potrzeb i może on być kopiowany wyłacznie w całości, razem z niniejsza strona tytułowa.

Czytanie z pliku C C++ C++ #include <stdio.h> int main() FILE wplik; char Znak; wplik = fopen( plik.txt, r ); if ( wplik!= NULL ) return 1; Znak = fgetc(wplik); while ( Znak!= EOF) printf( %c,znak); Znak = fgetc(wplik); fclose(wplik); return 1; #include <iostream> #include <fstream> using namespace std; ifstream char Strm; Znak; Strm.open( plik.txt ); Strm >> noskipws >> Znak; while ( Strm.good( ) ) cout << Znak; Strm >> Znak; Strm.close( ); #include <iostream> #include <fstream> using namespace std; ifstream Strm( plik.txt ); char Znak; Strm >> noskipws >> Znak; while ( Strm.good( ) ) cout << Znak; Strm >> Znak; Wykorzystujac klasę ifstream otwarcie pliku można dokonać poprzez konstruktor. Destruktor zaś dokonuje zamknięcia dostępu do pliku. Copyright c 2005 2008 Bogdan Kreczmer Operacje wejścia/wyjścia (odsłona druga) - pliki 1

Zapis do pliku C C++ C++ #include <stdio.h> int main() FILE wplik; #include <iostream> #include <fstream> using namespace std; #include <iostream> #include <fstream> using namespace std; wplik = fopen( plik.txt, w ); if ( wplik!= NULL) return 1; ofstream Strm; ofstream Strm( plik.txt ); fprintf(wplik, Ale fajnie! ); fclose(wplik); return 1; Strm.open( plik.txt ); Strm << Ale fajnie ; Strm.close( ); Strm << Ale fajnie ; Operacje zapisu można realizować z wykorzystaniem klasy ofstream. Konstruktor tej klasy umożliwia domyślne otwarcie pliku do zapisu. Destruktor zaś dokonuje zamknięcia dostępu do pliku. Copyright c 2005 2008 Bogdan Kreczmer Operacje wejścia/wyjścia (odsłona druga) - pliki 2

C Znaczniki dostępu C++ #include <stdio.h> int main() FILE wplik; wplik = fopen( plik.txt, a ); if ( wplik!= NULL) return 1; fprintf(wplik, Ale fajnie! ); #include <iostream> #include <fstream> using namespace std; ofstream Strm; Strm.open( plik.txt, ios::app ); fclose(wplik); return 1; Strm << Ale fajnie ; Znacznik in out app ate trunc binary Znaczenie Otwieranie pliku do odczytu (wartość domyślna dla ifstream) Otwiera plik do zapisu (wartość domyślna dla ofstream) Podczas zapisu zawsze dołacza znaki na końcu pliku. Po otwarciu pliku ustawia się na jego końcu. Usuwa poprzednia zawartość pliku. Nie zastępuje znaków specjalnych. Copyright c 2005 2008 Bogdan Kreczmer Operacje wejścia/wyjścia (odsłona druga) - pliki 3

Znaczniki a tryb dostępu w języku C ofstream Strm( plik.txt, ios::out ios::app ); Znacznik Znaczenie Tryb w C in Otwiera do odczytu (plik musi istnieć) r out Otwiera do zapisu; jeśli plik istnieje, to niszczy jego poprzednia zawartość; w jeśli zaś nie, to go tworzy. out trunc Otwiera do zapisu; jeśli plik istnieje, to niszczy jego poprzednia zawartość; w jeśli zaś nie, to go tworzy. out app Dołacza do pliku; jeśli plik nie istnieje, to go tworzy. a in out Otwiera w trybie odczytu i zapisu; wskaźnik aktualnej pozycji ustawiony r+ jest na poczatku, plik musi istnieć. in out trunc Otwiera w trybie odczytu i zapisu; kasuje wcześniejsza zawartość pliku; jeżeli plik nie istnieje, to jest tworzony. w+ Copyright c 2005 2008 Bogdan Kreczmer Operacje wejścia/wyjścia (odsłona druga) - pliki 4

ifstream i ofstream ifstream Strm( plik.txt, ios::out ios::trunc ); W klasach ifstream oraz ostream domyślnym sposobem otwarcia pliku jest odpowiednio otwarcie do odczytu lub otwarcie do zapisu. Nie wyklucza to możliwości otwarcia pliku do zapisu w przypadku posługiwania się obiektem klasy ifstream oraz otwarcia do odczytu w przypadku obiektu klasy ofstream. Różni te klasy to, że nie maja dostępnych metod i przeciażeń operatorów, w przypadku klasy ifstream, które umożliwiaja odczyt, zaś w przypadku klasy ofstream, metod i przeciażeń operatorów, które umożliwiaja zapis. Klasa uniwersalna jest klasa fstream. Zawiera ona zarówno metody do odczytu jak też zapisu. fstream Strm( plik.txt, ios::in ); char Znak; Strm >> Znak; fstream Strm( plik.txt, ios::out ); Strm << Ale uniwersalnie ;-) ; Copyright c 2005 2008 Bogdan Kreczmer Operacje wejścia/wyjścia (odsłona druga) - pliki 5

Stan strumienia Każdemu typowi strumienia (tzn. istream, ostream, ifstream, ofstream, itd.) przyporzadkowane sa znaczniki stanu określajace aktualny stan strumienia. Stan ten może być odczytany poprzez zestaw metod. Metoda good( ) eof( ) fail( ) bad( ) clear( ) Znaczenie Zwraca wartość true, gdy strumień jest poprawny, tzn. nie wystapił bład odczytu, ani też nie wystapił bład krytyczny. Zwraca true, gdy został napotkany znak końca pliku. Zwraca true, gdy wystapił bład, np. odczytu lub bład krytyczny, który mógł uszkodzić strumień. Zwraca true, gdy wystapił bład krytyczny, który mógł uszkodzić strumień. Czyści znaczniki stanu. fstream Strm( plik.txt, ios::in ); float Liczba; Strm >> Liczba; if ( Strm.fail( ) ) return 2; float Liczba; cin >> Liczba; if ( cin.fail( ) ) return 2; Copyright c 2005 2008 Bogdan Kreczmer Operacje wejścia/wyjścia (odsłona druga) - pliki 6

Sprawdzanie stanu strumienia cin >> Liczba; if ( cin.fail( ) ) cin.clear( ); cin.ignore( );... Jeżeli po sprawdzeniu stanu strumienia wykryty został bład, to przed wykonaniem następnej operacji należy wyzerować znaczniki stanu strumienia. Dotyczy to wszystkich strumieni. Copyright c 2005 2008 Bogdan Kreczmer Operacje wejścia/wyjścia (odsłona druga) - pliki 7

Czytanie z pliku Plik: dane.txt Plik: wynik.txt 23 1 # ifstream IStrm( dane.txt ); ofstream OStrm( wynik.txt ); float Liczba; 24 2 # 32 31 # 12 # = while (!IStrm.eof( ) &&!IStrm.bad( ) ) if ( ( IStrm >> Liczba).good( ) ) OStrm << (Liczba+1) << endl; else OStrm << # << endl << endl; IStrm.clear( ); IStrm.ignore( ); = 33 32 # 13 # Konstrukcja tego programu zakłada, że na końcu pliku z danymi znak # musi być ostatnim znakiem. W przykładzie należy zwrócić uwagę na konieczność wykorzystania metody clear. Copyright c 2005 2008 Bogdan Kreczmer Operacje wejścia/wyjścia (odsłona druga) - pliki 8

Przeciażenia operatora << oraz >> class Wektor //...................................................... public : float x, y; Wektor( ): x( ), y( ) ; //.................................................................... ostream & operator << ( ostream &OStrm, const Wektor & W ) return OStrm << ( << W. x <<, << W. y << ) << endl; ofstream OStrm( wektor.txt ); Wektor W; OStrm << W; Utworzone przeciażenia dla klasy ostream moga być również wykorzystywane na poziomie obiektów klasy ofstream i fstream. Możliwe jest to dzięki mechanizmom dziedziczenia oraz domyślnego rzutowania typów. Analogiczne relacje występuja między klasami istream, ifstream oraz fstream. Copyright c 2005 2008 Bogdan Kreczmer Operacje wejścia/wyjścia (odsłona druga) - pliki 9

Strumień jako parametr void ZapiszDoPliku( ofstream &OStrm ) OStrm << Witaj swiecie << endl; ofstream OStrm( powitanie.txt ); ZapiszDoPliku( OStrm ); OStrm << Witaj po raz drugi << endl; Obiekt odpowiadajacy danemu strumieniowi (zarówno wejściowemu, jak też wyjściowemu) nie moga być przekazywany do funkcji/metod poprzez wartość (operacja kopiowania obiektu strumienia jest zabroniona). Można go przekazać jedynie poprzez referencję lub wskaźnik. Copyright c 2005 2008 Bogdan Kreczmer Operacje wejścia/wyjścia (odsłona druga) - pliki 10

Podsumowanie Klasy ifstream oraz ofstream dostarczaja użytecznych mechanizmów odpowiednio do czytania plików oraz zapisu do plików. W szczególności pomocnym jest to, że destruktory obiektów tych klas dokonuja zamknięcia otwartych plików. Gdy zostanie wykryty bład operacji odczytu/zapisu, to przed wykonaniem następnej operacji znaczniki stanu powinny zostać wyzerowane. Przeciażenia operatorów >> oraz << dla klas istream i ostream może być wykorzystane na poziomie obiektów reprezentujacych strumienie odpowiednio ifstream oraz ofstream. Obiekty reprezentujace strumienie nie podlegaja kopiowaniu. Z tego powodu nie moga być przekazywane do funkcji/metod poprzez wartość. Nie może dla nich również być wykonana operacja przypisania. Copyright c 2005 2008 Bogdan Kreczmer Operacje wejścia/wyjścia (odsłona druga) - pliki 11