File kezelés

A VIK Wikiből
A lap korábbi változatát látod, amilyen Unknown user (vitalap) 2012. október 21., 21:08-kor történt szerkesztése után volt. (Új oldal, tartalma: „{{GlobalTemplate|Infoalap|Prog1BinaryFile}} Fájl a C szempontjából kétféle van: szöveges (text file) és bináris (binary file). A különbsé…”)
(eltér) ← Régebbi változat | Aktuális változat (eltér) | Újabb változat→ (eltér)

Ez az oldal a korábbi SCH wikiről lett áthozva.

Ha úgy érzed, hogy bármilyen formázási vagy tartalmi probléma van vele, akkor, kérlek, javíts rajta egy rövid szerkesztéssel!

Ha nem tudod, hogyan indulj el, olvasd el a migrálási útmutatót.


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

Ezen a helyen volt linkelve a(z) binarisfile.c nevű fájl ("példaprogramot" link szöveggel) a régi wiki http://wiki-old.sch.bme.hu/bin/view/Infoalap/Prog1BinaryFile oldaláról. (Ha szükséged lenne a fájlra, akkor a pontos oldalmegnevezéssel együtt küldd el a wiki@sch.bme.hu címre a kérésedet)
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

Ezen a helyen volt linkelve a(z) dinlist_file.c nevű fájl ("csatolt példaprogram" link szöveggel) a régi wiki http://wiki-old.sch.bme.hu/bin/view/Infoalap/Prog1BinaryFile oldaláról. (Ha szükséged lenne a fájlra, akkor a pontos oldalmegnevezéssel együtt küldd el a wiki@sch.bme.hu címre a kérésedet)
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:

Ezen a helyen volt linkelve a(z) szovegfajl.c nevű fájl ("szovegfajl.c" link szöveggel) a régi wiki http://wiki-old.sch.bme.hu/bin/view/Infoalap/Prog1BinaryFile oldaláról. (Ha szükséged lenne a fájlra, akkor a pontos oldalmegnevezéssel együtt küldd el a wiki@sch.bme.hu címre a kérésedet)


-- Kristof - 2006.12.05. -- Kristof - 2007.11.19.