Archív Inet.sk Pôvodný autor: Michal Kyžňanský
28. 04. 2006 o 00:00 6939x

XXVI. Diel C++ - Hlavičkové súbory IV. – stdio.h I.

Dnes si povieme o hlavičkovom súbore stdio.h, ktorý obsahuje množstvo nástrojov na prácu so súborom v rozličných podobách. Stdio.h nesmie chýbať pri vytváraní jednoduchých a rýchlych programov pre prácu so súbormi.
XXVI. Diel C++ - Hlavičkové súbory IV. – stdio.h I.
Ako už vieme z predchádzajúcich dielov, hlavičkové súbory obsahujú vždy niečo nové, niečo čo iste v programovaní použijeme a nie je nutné, aby sme to museli znovu vytvárať vlastnoručne. Každý hlavičkový súbor má vlastnú esenciu, ktorou obohatí obzory v programovaní a rozšíri mantinely možností. Dnes sa zameriame na hlavičkový súbor stdio.h. Tiež patrí do kategórie zdedených od staršieho brata C++, jazyka C. Je to hlavičkový súbor pre prácu s I/O – input/output (vstup a výstup).

Nechýbajú teda funkcie na výpis do súboru, načítavanie zo súboru po rôzne veľkých blokoch dát a práca s bufferom – blok pamäte využívaný pre načítavanie alebo zapisovanie ešte predtým, ako sa dáta fyzicky zapíšu do súboru.


Základné – Standard vstupy/výstupy


Súbor stdio.h definuje aj tri základné dátové toky. Dva výstupne, jeden vstupný.

stdout – je výstup, ktorý je používaný pri tvorbe konzolových aplikácii a jeho základnou funkciou sú printf.
stderr – obsahuje chybové hlásenia pre rôzne chyby súvisiace s otváraním súborov a prístupu k nim.
stdin – je to vstup, ktorý je vstupom z klávesnice, ale podobne ako všetky zmieňované štandardné dátové toky, je možné ich funkciou freopen( ) presmerovať.


Symbolické konštanty a piliere


EOF – End Of File
Toto je špeciálna hodnota, ktorá je vracaná niekoľkými funkciami, ktoré načítavajú dáta zo súboru. Na konci každého textového súboru sa nachádza táto hodnota a určuje, pokiaľ sa nachádza vlastný obsah súboru. Táto kvázi symbolická konštanta je nesmierne dôležitá, pretože podľa nej vieme, kde je koniec súboru a pokiaľ máme načítavať dáta.

Pozícia v súbore
Jedná sa o interný pointer, ktorý poukazuje na aktuálnu pozíciu v súbore. Pri načítavaní sa pozícia mení podľa funkcie, ktorú používame a jednoducho povedané, je to akýsi ukazovateľ na pozíciu v súbore. Je to tiež základ pre vykonávanie procesu načítavania. Táto pozícia sa dá zistiť alebo meniť niekoľkými funkciami, ktoré si predstavíme nižšie v druhom dieli stdio.h.

Error indikátor
Indikuje chybu pri načítavaní výpise a podobne. Funkcia perror ho zistí a vypisuje a funkcia clearerr ho odstraňuje a vracia na nechybovú hodnotu.


Základné funkcie



Otvorenie súboru – fopen( )

Táto funkcia otvorí, alebo ak neexistuje, vytvorí súbor s daným názvom. Druhý parameter udáva, v akom móde sa má súbor otvoriť. O tomto sme už raz hovorili v 13. dieli C++ programovania – práca so súbormi I.
Príklad
FILE *f; 
f = fopen("C:\diel26.txt","w");


Zatvorenie súboru – fclose( )

Táto funkcia zatvorí súbor. Táto funkcia zapíše do súboru aj všetky dáta načítané v bufferi. Je dôležité s ňou pracovať, ak chceme v programe so súborom pracovať vo viacerých funkciách. Po ukončení práce so súborom v každej funkcii je nutné zatvoriť súbor, aby bol použiteľný pre opätovné otváranie.
Príklad
fclose(f); 


Presmerovanie výpisu stdout, stderr, alebo znovu otvorenie súboru freopen( )

Výpis stdout je klasický výpis do konzole, ktorý poznáme s jazyka C a funguje samozrejme aj v C++, ak vytvárame konzolovú aplikáciu. Funkcia freopen( ) sa v prvom rade snaží zatvoriť všetky otvorené súbory s ktorými program pracuje. Potom otvorí súbor, ktorého meno je zadané, v zadanom móde a presmeruje do neho zadané parametre. Presmerovanie sa netýka len štandardných konzolových výpočtov. Pri práci so súbormi sa toto tiež dá ľahko využiť pre rýchle presmerovanie výpisu, resp. že zmeníme cieľ výpisu do iného súboru. Uvedieme si dva príklady. Jeden presmeruje výpis stdout a druhý presmeruje výpis z jedného súboru do druhého.
Príklad1
freopen ("C:\vypis.txt","w",stdout); 
printf ("Táto veta je z konzole presmerovaná do súboru");
fclose (stdout);


Príklad2
FILE *f; 
f = fopen("C:\novy.txt","w");
fprintf(f,"ahoj");
freopen ("C:\presmerovany.txt","w",f);
fprintf (f,"Táto veta je presm. do iného súboru");
fclose (f);


Vymazanie remove( ) a premenovanie súboru rename( )

Na vymazanie súboru slúži funkcia remove (). Táto funkcia vracia hodnotu 0, ak bolo vymazanie úspešné, t.j. ak bol súbor nájdený, a ak k nemu môže program pristúpiť a vykonať proces zmazania. Ak nebola splnená jedna z týchto podmienok,
Príklad
remove("C:\diel26.txt"); 

Na premenovanie máme z palety funkcii hlavičkového súboru stdio.h funkciu rename( ). Funkcia rename( ) nielenže dokáže premenovať súbor, ale ho aj premiestniť. Ukážeme si dva príklady, z ktorých prvý bude len premenovávať a druhý aj premenuje aj premiestni. Pred oboma príkladmi, však treba mať pripravený textový súbor – test.txt, ktorý budeme presúvať. V prvom prípade v adresári, kde máme uložený projekt, v druhom na disku C, alebo resp. po úprave kóde kde chcete.
Príklad1
char staremeno[20]; 
char novemeno[20];

strcpy(staremeno,"test.txt");
strcpy(novemeno,"premenovany.txt");

rename( staremeno , novemeno ); //proces premenovania

Dôležité je si uvedomiť, že názov, ktorý má súbor v tomto prípade obsahuje aj adresárovú cestu. Čiže ak nezadáme žiadnu cestu, iba rovno meno súboru, tak ho bude program hľadať v adresári uloženého C++ projektu. Pred oboma testami

Príklad2
char staremeno[50]; 
char novemeno[50];

strcpy(staremeno,"C:\test.txt");
strcpy(novemeno,"C:\mojadresa\presunuty.txt");

rename( staremeno , novemeno );

Ďalšia vec je, že ak premiestňujeme súbor, tak adresár, do ktorého súbor umiestňujeme už musí existovať. Program ho nevytvorí.

Načítavanie a jeho možnosti

Táto časť je veľmi široká, pretože stdio.h obsahuje viac ako 10 funkcii na načítavanie. Líšia sa tým, že napríklad jedna načítava celý riadok, jedna po reťazcoch, iná po znakoch, alebo po rôznych dátových typoch a podobne. Začneme od načítavania po najmenších blokoch dát – po jednom znaku.

Načítavanie po jednom znaku fgetc( ) / getc( )

Načítavanie po jednom znaku by sa mohlo zdať ako zbytočne alebo nevyužiteľné, ale má nesmierne veľa použití a jeho pravá sila je vo flexibilite. Uvediem pár príkladov pre toto využitie. Napríklad kódovanie metódou posúvania každého znaku o iný počet čísel v ASCI tabuľke, presné načítavanie vrátane medzier a pod.

Všeobecný zápis – fgetc(pointer typu FILE)

Demonštrácia bude veľmi jednoduchá. Budeme načítavať zo súboru zdroj.txt ,v ktorom máme zapísaný reťazec „ahoj”. Budeme ho načítavať po jednom znaku a vypisovať do komponentu Memo.

Príklad
char c;  
FILE *f;

f = fopen("C:\zdroj.txt","r"); //otvorenie súboru
c = fgetc(f); //priradenie načítanej hodnoty
while (c != EOF){ //podmienka,pokiaľ c nemá hodnotu EOF
Memo1->Lines->Add(c); //výpis do komponentu Memo
c = fgetc(f);
}
fclose(f); //korektné uzatvorenie


Načítavanie po reťazci fscanf( )

Táto funkcia načítava formátované reťazce nezáleží na dĺžke, indikujúci faktor kde jeden reťazec končí a iný začína je medzera. Táto funkcia tiež konvertuje načítané reťazce do konkrétnych dátových typov.

fscanf(f,”%q”, &nazov_premennej);

f - pointer typu FILE
q – predstavuje dátový typ, ktorý načítavame. Celé číslo ma tento koeficient d, desatinné má f, reťazec má s, znak má c.
Príklad
FILE *f; 
char ret[20];

f = fopen("C:\zdroj.txt","r");
fscanf(f,"%s",&ret); //načítanie reťazca so súboru
Memo1->Lines->Add(ret);


Nabudúce budeme pokračovať v sdtio.h, konkrétne dokončíme načítavanie, výpis a používanie bufferu.

Súvisiace články:

Prehľad všetkých dielov

Novinky a inšpirácie

Z nášho blogu

Prečítajte si novinky, inšpirácie a dôležité informácie zo sveta webhostingu a technológií.

Bezpečnostné aktualizácie PHP: Chráňte svoj web pred hrozbami Oznamy
21. 10. 2026

Bezpečnostné aktualizácie PHP: Chráňte svoj web pred hrozbami

Vývojársky tím PHP vydal dôležité bezpečnostné záplaty pre všetky oficiálne podporované verzie PHP 8. Na našich serveroch sme nezaváhali ...

Čítať viac
Gmail končí s funkciou „Odoslať ako“ pre cudzie e-mailové adresy. Čo to znamená pre vás? Oznamy
01. 10. 2026

Gmail končí s funkciou „Odoslať ako“ pre cudzie e-mailové adresy. Čo to znamená pre vás?

Google oznámil, že v januári 2027 zruší v Gmaile funkciu „Odoslať ako“ (Send as) pre e-mailové adresy od iných poskytovateľov. Ak ste si ...

Čítať viac
Večerná „prestávka“ pre server VIP033 Oznamy
25. 09. 2026

Večerná „prestávka“ pre server VIP033

Neustále pracujeme na tom, aby vaše weby bežali hladko, rýchlo a bezpečne. Technológie idú míľovými krokmi vpred a my v Inet.sk s nimi dr...

Čítať viac
Novinky na Inet.sk (09 / 2026) Novinky
09. 09. 2026

Novinky na Inet.sk (09 / 2026)

Posledné mesiace sme v Inet.sk nevenovali len stabilite serverov, ale najmä počúvaniu vašich reálnych skúseností z každodennej praxe. Výs...

Čítať viac

Podpora klientom

Máte ďalšie otázky?

Nezúfajte, pripravili sme pre Vás jednoduché odpovede na najdôležitejšie otázky, ktoré od našich klientov dostávame.

Zistiť viac

Naše výhody

Prečo si nás vybrať?

Našim klientom ponúkame až 30-dňovú záruku vrátenia peňazí.

Sme skutočný slovenský webhosting

Slovenská
firma

Nepatríme pod žiadnu nadnárodnú spoločnosť, sme malá rodinná firma.

Na nás sa môžete kedykoľvek spoľahnúť

Dlhoročné
skúsenosti

Na slovenskom trhu pôsobíme už viac ako 20 rokov, sme overená značka.

Naši prví zákazníci sú stále s nami

Spokojní
zákazníci

Naši zákazníci sú ako naša rodina, preto nám verí už viac ako 1250 klientov.

Maximálna bezpečnosť

Maximálna
bezpečnosť

Chránime Vás pred útokmi i SPAMom. U nás sú Vaše dáta v bezpečí.

Prozákaznícka podpora

Ochotná
podpora

Zakladáme si na individuálnom prístupe, preto Vám vždy radi pomôžeme.

Kvalita a dobrá cena

Férová
cena

Cena pri obnove je rovnaká ako pri objednávke. Nezdražujeme po prvom roku a bez skrytých poplatkov.

U nás sa Vám nič nestratí

Pravidelné
zálohovanie

Vaše dáta zálohujeme každý deň, dostupné sú aj zálohy z pred niekoľkých mesiacov.

Svižný Admin Panel nájdete len u nás

Prehľadný
Admin Panel

Máme rýchly a prehľadný Admin Panel, ktorý zvládne používať naozaj každý.

Správa používateľov

Správa
používateľov

Spravujte svoje projekty bez akýchkoľvek obáv s kolegami alebo externými partnermi.

Máme zľavy pre verných klientov

Vernostné
zľavy

Verní klienti u nás automaticky získavajú 15 % zľavu na každú ďalšiu objednávku.

My Vás nebudeme obmedzovať

Bez
obmedzení

Neobmedzujeme počet databáz, e-mailov, ftp a ani prenos dát.

Hosting pre WordPress

WordPress
na 1 klik

Nainštalujte si obľúbené redakčné systémy rýchlo a jednoducho.

Referencie

Spokojní zákazníci

Pozrite sa, čo o nás povedali naši klienti. Neváhajte a pridajte sa k nám ešte dnes.

Auto 100
Bystricoviny
eCall Slovakia
Filip Jančík
Frost
Merkury Broker
Mi:Su Design
Mesto Nitra
Pro Clienta
Schneider Lekáreň
Vego Marketing
Mesto Zlaté Moravce

Všetky ceny sú uvádzané bez DPH
© 2006 - 2026, Inet.sk, s. r. o., Všetky práva vyhradené

Na našej stránke používame "cookies". Vďaka nim sledujeme návštevnosť, prispôsobujeme reklamu a používateľské nastavenia, čo zlepšuje Váš zážitok z našej stránky. Súhlasíte s ich spracovaním?
Vlastné nastavenia cookies