„File kezelés” változatai közötti eltérés

A VIK Wikiből
Ugrás a navigációhoz Ugrás a kereséshez
 
17. sor: 17. sor:
 
(És természetesen kimenteni is ennek megfelelően kell az adatokat.)
 
(És természetesen kimenteni is ennek megfelelően kell az adatokat.)
  
A {{InLineFileLink|Infoalap|Prog1BinaryFile|dinlist_file.c|csatolt példaprogram}} bemutatja, hogyan lehet egy dinamikus lista tartalmát fájlba kimenteni, majd onnan betölteni. Ez jó eséllyel kell a nagyháziba is...
+
A [[Média:prog1_dinlist_file.c|csatolt példaprogram]] bemutatja, hogyan lehet egy dinamikus lista tartalmát fájlba kimenteni, majd onnan betölteni. Ez jó eséllyel kell a nagyháziba is...
 
 
A szövegfájlok kezelésére is van itt egy rövid példa: {{InLineFileLink|Infoalap|Prog1BinaryFile|szovegfajl.c|szovegfajl.c}}
 
 
 
-- [[CsorbaKristof|Kristof]] - 2006.12.05.
 
-- [[CsorbaKristof|Kristof]] - 2007.11.19.
 
 
 
  
 +
A szövegfájlok kezelésére is van itt egy rövid [[Média:prog1_szovegfajl.c|példa]].
  
 
[[Category:Infoalap]]
 
[[Category:Infoalap]]

A lap jelenlegi, 2013. január 29., 18:52-kori változata

Fájl a C szempontjából kétféle van: szöveges (text file) és bináris (binary file). A különbség a használt műveletekben van: szövegfájlba írhatunk az fprintf-fel (a printf fájlba író testvére), olvashatunk sorokat, van fscanf és hasonlók. A rendszer tudja a fájlról (miután megmondtuk neki :) ), hogy az szöveg. A bináris fájl akármi lehet. A rendszer számára egy jókora bájtsorozat. A műveletek meg kb. annyiból állnak, hogy a memória bizonyos részeit (ahol nekünk változóink vannak) kimásoljuk fájlokba, máskor meg visszaolvassuk. (Itt nincs olyan, hogy sor vége meg ilyesmi... a programozó az egész adattömeggel azt kezd, amit akar, a fájlkezelő függvényeket ez nem érdekli...)

Bináris fájlok kezelésének legfontosabb függvényei: fopen, fwrite, fread, fflush, fclose.

Csatoltam egy példaprogramot is, amiben binárisan megnyitunk egy fájlt, beleírjuk egy (statikus) tömb tartalmát, majd betöltjük az adatokat a fájlból egy másik tömbbe.

Dinamikus lista és bináris file

A nagyházikban általában kell dinamikus lista és fájlkezelés is. Mivel egy dinamikus lista nem egy összefüggő területet foglal el a memóriában, ezért nem lehet egyetlen fwrite művelettel kiírni (illetve egyetlen fread-del beolvasni). Végig kell menni az összes elemén és egyenként egymás után kimenteni őket. (Ha több fwrite-ot hajtotok végre egy fájlra, az adatok szépen egymás után kerülnek bele, így egymás után be is lehet majd olvasni őket.)

Egy dolgokra viszont nagyon figyeljetek: ha dinamikusan foglaltok memóriát, akkor ott kaptok helyet, ahol éppen van! Legközelebb minimális az esély arra, hogy ugyanott kapjatok helyet. Ez viszont azt jelenti, hogy a dinamikus lista elemei máshol lesznek, ezért pointer értékeket ne írjatok ki fájlba, mert visszaolvasáskor azok értelmetlen helyekre mutatnak majd! A dinamikus listából csak azokat az adatokat mentsétek ki (és majd töltsétek be), amik nem a listával, hanem a tartalommal kapcsolatosak! Tehát a pointereket ne!

Dinamikus lista tartalmát úgy olvassuk be fájlból, hogy

  • A program létrehozza az új elemet (malloc, pointerek beállítása stb.), majd
  • Beolvassa a fájlból az adatokat (fread), de a pointereket nem bántja

(És természetesen kimenteni is ennek megfelelően kell az adatokat.)

A csatolt példaprogram bemutatja, hogyan lehet egy dinamikus lista tartalmát fájlba kimenteni, majd onnan betölteni. Ez jó eséllyel kell a nagyháziba is...

A szövegfájlok kezelésére is van itt egy rövid példa.