Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!
Zadejte Vaši e-mailovou adresu:
Kamarád fotí rád?
Přihlas ho k odběru fotomagazínu!
Zadejte e-mailovou adresu kamaráda:
C/C++
Neformátovaný vstup a výstup v C++
2. května 2001, 00.00 | V tomto článku nejprve předvedu dva slíbené příklady na formátovaný vstup a výstup. Poté se podíváme na metody datových proudů read a write pro práci s bloky dat. Ukážeme si také, jak pracovat s binárními soubory pomocí proudů v C++.
Neformátovaný vstup a výstup v C++Ještě než se dostaneme k samotnému tématu článku, rád bych se vrátil ke článku minulému. Na konci jsem slíbil několik málo krátkých příkladů na formátovaný vstup a výstup. Jako první uvedu bez velkého komentáře program, který vše, co přečte ze vstupu, zapíše na výstup a do souboru:
|
Zde používám metodu get . Metoda get bez parametrů přečte jeden znak.
Druhý program přečte obsah parametrem zadaného souboru a zapíše jeho obsah v šestnáctkové soustavě.
|
Tolik tedy k formátovanému vstupu a výstupu. Vše lze výhodně použít při práci s textovými soubory, nebo při tvorbě filtrů v Unixových OS. Stejně tak lze tyto možnosti použít při tvorbě CGI programů. K formátovanému vstupu a výstupu se ještě vrátíme u paměťových proudů. Nyní se ale konečně podívejme na neformátovaný vstup a výstup.
Neformátovaný vstup a výstup se používá hlavně při práci s binárními soubory. Vstup se provádí metodou read . Její první parametr je char* a značí ukazatel na blok paměti, do kterého bude zapsán přečtený obsah souboru. Druhý parametr je int . Udává maximální počet přečtených bytů. Dojde-li k chybě (I v tomto případě je chybou také konec souboru.), můžeme skutečný počet přečtených bytů zjistit metodou int gcount(). K zapsání bloku dat slouží metoda write . Tato metoda má stejné parametry jako metoda read . Samozřejmě rozdíl je v tom, že metoda write blok paměti zapíše, ne přečte. Vše ukážu na následujícím příkladě. Vytvoříme něco jako příkaz copy, který nakonec vypíše, kolik bytů zkopíroval.
|
Chtěl bych upozornit na konstruktory tříd ifstream a ofstream . Jako jejich druhý parametr je tak zvaný režim souboru. Mód ios::binary znamená, že soubor je otevřen v binárním módu. Existuje mnoho souborových módů. Například: ios::app - pokud soubor existoval, bude se připisovat na jeho konec, ios::ate - nastaví "ukazatel" souboru (Spíš bych měl říci pozici, nebo zapisovací hlavu.) na konec atd... Také bych chtěl upozornit na druhý parametr metody write . Zapíšu jen tolik, kolik jsem přečetl. Jinak soubory čtu i zapisuji po 1000 bytových blocích.
Tolik tedy k neformátovanému vstupu a výstupu. Jeho využití je hlavně při práci s binárními soubory. Příště se podíváme na paměťové proudy, které umožní formátovat řetězec v operační paměti.
Obsah seriálu (více o seriálu):
- Základy OOP v C++: Od C k C++
- Základní pojmy objektově orientovaného programování
- Vytváření tříd, instance třídy, zasílání zpráv v C++
- Vytváření instancí - konstruktory, destruktory
- Kopírovací konstruktor v C++
- Jednoduchá dědičnost v C++
- Časná versus pozdní vazba - úvod do polymorfismu v C++
- Polymorfismus - dokončení
- Vícenásobná dědičnost v C++
- Vícenásobná dědičnost v C++ - opakovaná dědičnost
- Vícenásobná dědičnost v C++ - volání konstruktorů a destruktorů
- Přetěžování operátorů v C++ 1.díl
- Přetěžování operátorů v C++ 2. díl
- Vstupní a výstupní operace pomocí datových proudů v C++
- Přetěžování operátorů << a >> pro datové proudy v C++
- Neformátovaný vstup a výstup v C++
- Paměťové proudy v C++
- Prostory jmen v C++
- Řetězce v C++
- Výjimky v C++
- Výjimky v C++ - výjimky tvoří dědičnou hierarchii
- Výjimky v C++ - dokončení
- Dynamická identifikace typů v C++
- Přetypování v C++
- Problémy s typy při vícenásobné dědičnosti
- Šablony funkcí v C++
- Šablony datových typů v C++
- Vnitřní typy u parametrů šablon, vnořené šablony v C++
- Pole s libovolným intervalem indexování v C++
- Datové kontejnery v C++ - Úvod do STL
- Vector - datový kontejner v C++
- Iterátory v C++
- Šablona vector v C++ a iterátory
- Asociativní pole v C++
- Množina v C++
- Funkční objekty v C++
- Standardní funkční objekty v C++
- Úvod do standardních algoritmů v C++
- Kopírovací a přesouvací algoritmy v C++
- Vyhledávací algoritmy v C++
- Skenovací (prohlížecí) algoritmy v C++
- Transformační algoritmy v C++
- Řadící algoritmy v C++
- Halda v C++
- Standardní algoritmy v C++ - dokončení
- Automatické ukazatele v C++
- Inteligentní ukazatel - čítač referencí v C++
- Použití čítače referencí v C++
- Kopírování velkých objektů v C++
- Řízené kopírování prvků v poli v C++
- Dokončení seriálu objektově orientované programování v C++
-
25. listopadu 2012
-
30. srpna 2002
-
10. října 2002
-
4. listopadu 2002
-
12. září 2002
-
25. listopadu 2012
-
28. července 1998
-
31. července 1998
-
28. srpna 1998
-
6. prosince 2000
-
27. prosince 2007
-
4. května 2007