Keresés


Toplista

Toplista
  • betöltés...

Magántanár kereső

Ha szívesen korrepetálnál, hozd létre magántanár profilodat itt.
Ha diák vagy és korrepetálásra van szükséged, akkor regisztrálj be és írd meg itt, hogy milyen tantárgyban!

C++ adatnyilvántartó program.bin

392
Van egy adatnyilántartó program forráskódja, és át kéne írnom úgy hogy az adattároláshoz bináris fáljt használjon de egyszerűen nem megy. Valaki legyen szíves segíteni:/
Jelenleg 1 felhasználó nézi ezt a kérdést.
c++, programozás
0
Felsőoktatás / Informatika

Válaszok

1
Bináris file megnyitása olvasásra

Amennyiben egy bináris fájlból szeretnénk olvasni, első lépésben meg kell a fájlt nyitni. Ehhez példányosítani kell a FileStream osztályból:
FileStream fs = new FileStream("C:\\adataim.dat", FileMode.Open, FileAccess.Read);
A példányosítás során meg kell adni a fájl nevét, illetve a megnyitás módját. A módokat a FileAccess enum tartalmazza

Read: a fájlból csak olvasni akarun
Write: a fájlba csak írni akarun
ReadWrite: a fájlból olvasni és írni is akarun
A fájl nevének megadásakor érdemes a teljes elérési útvonalat leírni. Ügyeljünk, hogy a sztring literálok belsejében a ’\’ karakternek speciális jelentése van, így egyetlen perjel leírásához a dupla ’\\’ jelet kell alkalmazni.
Amennyiben sikeres volt a példányosítás (a fájl létezett, és volt jogunk a megadott módon megnyitni), úgy példányosítani kell egy olvasó osztályt is:
BinaryReader read = new BinaryReader( fs );
A read nevű példányon keresztül tudunk az fs fájlból olvasni adatokat a későbbiek sorn.

Megnyitás lehetséges problémái

Amennyiben egy bináris fájlból szeretnénk olvasni, első lépésben meg kell a fájlt nyitni. Ehhez példányosítani kell a FileStream osztályból:
FileStream fs = new FileStream("C:\\adataim.dat", FileMode.Open, FileAccess.Read);
Elképzelhető, hogy a fájl azért nem megnyitható, mert nem is létezik, vagy egyéb problémánk támad. Nem lehet például egy csak olvasható médiumon (pl. CD lemezen) lévő fájlt írásra megnyitni.
A FileStream konstruktora a sikertelenséget kivétel aktiválásával jelzi:
try
{
FileStream fs = new FileStream(@”C:\adatok.dat”, FileMode.Open, FileAccess.Read);
//...
}
catch
{
//... nem sikerült a file megnyitása ...
}

Olvasás bináris file-ból

Egy sikeresen megnyitott bináris fájlból a BinaryReader-en keresztül olvasunk a megfelelő ReadXXXX() használatával.
Pl.:
FileStream fs = new FileStream(@”C:\adatok.dat”, FileMode.Open, FileAccess.Read);
BinaryReader r = new BinaryReader( fs );
int x = r.ReadInt32();
double d = r.ReadDouble()
Megnyitás után az első olvasás a fájl legelső pozíciójától hajtódik végre. Minden olvasási művelet során arrébb lépünk a fájlban a következő adatra. Egy ReadInt32() például 4 byte-tal lép arrébb a fájlon belül, mert egy Int32 típusú adat 4 byte-on van tárolva.

File végére érés

Egy sikeresen megnyitott bináris fájlból a BinaryReader-en keresztül olvasunk a megfelelő ReadXXXX() használatával.
Pl.:
FileStream fs = new FileStream(@”C:\adatok.dat”, FileMode.Open, FileAccess.Read);
BinaryReader r = new BinaryReader( fs );
int x = r.ReadInt32();
double d = r.ReadDouble()
Amennyiben folyamatosan olvasunk a fájlból, úgy haladunk előre a fájlban lévő adatok feldolgozásában. Előbb-utóbb el fogjuk érni a fájl végét. A fájl végének elérésekor már nem tudunk tovább olvasni, hiszen ott már nincs adat.
A fájl végének elérését le tudjuk kérdezni a Peek() segítségével. A Peek() hivatalosan a következő byte értékét adja meg a nélkül, hogy a pozíciót léptetné. De ha nincs következő byte, akkor a Peek() -1 értéket ad vissza.
Pl.:
int osszeg = 0;
while (r.Peek() != -1)
{
int x = r.ReadInt32();
osszeg = osszeg + x;
}
A fenti kis ciklus a fájlban egymás után elhelyezkedő, Int32 típusú adatok összegét határozza meg.

Pozícionálás file-ban

A FileStream lehetõséget biztosít nekünk, hogy a fájlon belül mozogjunk elõre-hátra. Ennek segítségével visszatérhetünk egy korábbi adatra, újból kiolvashatjuk, illetve átugorhatunk a fájl egy szakaszát feldolgozás nélkül.
Ezt a Seek()-en keresztül tudjuk elvégezni. A Seek() kétparaméteres. Egy egész számot kell megadnunk, valamint az egész szám értelmezését. Ez utóbbit a SeekOrigin enum tartalmazza:

Begin: az egész szám annak a bájtnak a sorszámát tartalmazza, amelyikre rá akarunk pozícionálni. A sorszámozás a fájl elejétõl kezdõdik. Az elsõ byte sorszáma 0.
End: a sorszám a fájl végétõl visszafelé számolva annak a bájtnak a sorszámát tartalmazza, amelyikre rá akarunk pozícionálni. A sorszámozás visszafele halad, az utolsó hasznos byte sorszáma 0.
Current: az aktuális pozíciótól mérve kell megadni az elõre-, ill. visszafele pozícionálás mértékét. A megadott egész szám határozza meg, hány byte-tal kell elõrefele (pozitív érték), vagy visszafele (negatív érték) pozícionálni.
Pl.:
FileStream fs = new FileStream(@”C:.dat”, FileMode.Open, FileAccess.Read);
fs.Seek( -4, SeekOrigin.Current );

Bináris file megnyitása írásra

Amennyiben egy bináris fájlba adatokat szeretnénk kiírni, első lépésben meg kell a fájlt nyitni. Ehhez példányosítani kell a FileStream osztályból:
FileStream fs = new FileStream("C:\\adataim.dat", FileMode.Create, FileAccess.Write);
A példányosítás során meg kell adni a fájl nevét, illetve a megnyitás módját. A módokat a FileAccess enum tartalmazza

Read: a fájlból csak olvasni akarun
Write: a fájlba csak írni akarun
ReadWrite: a fájlból olvasni és írni is akarun
A fájl nevének megadásakor érdemes a teljes elérési útvonalat leírni. Ügyeljünk, hogy a sztring literálok belsejében a ’\’ karakternek speciális jelentése van, így egyetlen perjel leírásához a dupla ’\\’ jelet kell alkalmazni.
Amennyiben sikeres volt a példányosítás (a fájl létezett, és volt jogunk a megadott módon megnyitni), úgy példányosítani kell egy olvasó osztályt is:
BinaryWriter write = new BinaryWriter ( fs );
A write nevű példányon keresztül tudunk az fs fájlba adatokat kiírni a későbbiek sorn.

Írás a file-ba

Egy sikeresen megnyitott bináris fájlba a BinaryWriter-en keresztül tudunk adatokat kiírni a Write() használatával.
Pl.:
FileStream fs = new FileStream(@”C:\adatok.dat”, FileMode.Create, FileAccess.Write);
BinaryWriter w = new BinaryWriter ( fs );
w.Write( 12 );
double d = ....;
w.Write( d );
Megnyitás után a fájl legelső pozícióján állunk. Minden írási művelet során lépünk a fájlban a megfelelő mennyiségű byte-tal. A Write felismeri a paraméter típusát (a 12 egy int típusú literál, a d egy double), és megfelelő módon írja ki az értéket a fájlba, majd lép a kiírt mennyiségű bájtnyival arrébb. Ennek megfelelően a sorozatosan kiadott Write() az adatokat ugyanebben a sorrendben írja bele a fájlba.

File bezárása

Egy sikeresen megnyitott bináris fájlba való írás (vagy olvasás) végén a fájlt illik bezárni.
Erre használható a BinaryReader vagy BinaryWriter példány is, de maga a FileStream példány is. Mindegyiknek van Close() metódusa, mely lezárja a fájlt.
A fájl lezárásakor a módosítások garantáltan kiíródnak a háttértárolóba. E nélkül bizonyos mennyiségű adatmódosítás elveszhet.
Pl.:
FileStream fs = new FileStream(@”C:\adatok.dat”, FileMode.Create, FileAccess.Write);
BinaryWriter w = new BinaryWriter ( fs );
//...
fs.Close();
e();

0