[MEGOLDVA]fseek probléma

Fórumok

A problémám az az, hogy van egy bináris fájl, amibe struc-ok vannak. És megvan szabva, hogy a 3. helyet felül kell írnom, de valamiért mindig a végére írja a fájlnak.

Kódrészletem:
struct adatok{
int id;
char nev[30];
int kor;
};

...
FILE *fp=fopen("adatok.dat","a+b");
struct adatok ad;
ad.id=2;
ad.nev="Kiss Pista";
ad.kor=30;

fseek(fp,3*sizeof(ad),SEEK_SET);
fwrite(&ad,sizeof(ad),1,fp);
...

Az "adatok.dat" -ban van elegendő adat, mégis mindig a végére írja valami miatt.
Esetleg tud valaki segíteni?

Hozzászólások

 "a+b" 

=>

 "wb" 
 ad.nev="Kiss Pista"; 

=>

 strcpy(ad.nev,"Kiss Pista"); 

Igen, az strcpy kell a string-ek másolásához, ezt elírtam, de a "wb" nem lesz jó nekem, mert akkor kitörli az bináris fájl tartalmát és üreset hoz létre.

Szerk: Most olvasom csak, hogy az "a" az csak olvasni képes bárhonnan, írni csak a végére ír... Akkor ezt nem úszom meg ilyen könnyen...
---------------------------
Oszt jónapot!

a "wb" nem lesz jó nekem, mert akkor kitörli az bináris fájl tartalmát és üreset hoz létre.
uh, ezt beneztem, valoban, elnezest. ezt a level2-es filekezelest en is csak a legprimitivebb esetekben hasznalom, azaz: 1/ siman szekvencialisan kell beolvasni egy file-t 2/ kockazat nelkul kell irni bele, azaz nem tragedia ha _barmi_ elhasal kozben es/vagy eleve felul kell irni valamit (es nem baj, ha a felulirasnal pl ugy szakad meg hogy az eredetit torolte). ha ennel tobb kell, akkor azonnal open(), read(), write(), ... es nem f*(). ahogy a kollega is mondja, lejjebb.

fp=fopen("adatok.dat","r+b");

Így kell megnyitni a fájlt, ahogy nekem kell.
---------------------------
Oszt jónapot!

Okosabb, mert az open-nek sokkal tobb flagje van, mint a fopen-nek, es millio fele esetet le tudsz vele kezelni. Ha kell az l2 IO, akor van fdopen(3), ami ugyanugy FILE * eroforrast ad vissza, de parameterkent az open(2) altal adott descriptort var.

Nem akarok sok szot vesztegetni ra, olvasd el a man 2 open oldalt, es rajossz.
--

Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal 

Annyiban mindenkeppen "butabb", hogy a fopen sokkal kevesebb opciot tesz lehetove a fajlmegnyitashoz, pl. a open-nek meg lehet adni azt, hogy O_CREAT | O_NOTRUNC, ami tok jo, mert egyben lekezeli a ketfele problemat. Azonfelul a file modot is meg lehet adni tok kenyelmesen, amit a fopen-nal nehezkesebb. Pesze, ez az en privat velemenyem...
--

Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal