Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

iostream - Insertovanje korisnicki definiaanih podataka

[es] :: C/C++ programiranje :: C/C++ za početnike :: iostream - Insertovanje korisnicki definiaanih podataka

[ Pregleda: 2499 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Sisko.Marcetic
Skobalj

Član broj: 153060
Poruke: 31
212.200.175.*



Profil

icon iostream - Insertovanje korisnicki definiaanih podataka18.10.2007. u 10:56 - pre 200 meseci
Imam korisnicki definisan podatak (struct ili class) i bazu podataka fajl
Problem je kako inserovati podatak na odredjenu lokaciju, naime non stop ubacuje
podatak na kraj fajla umesto na zadatu poziciju

Evo koda
Code:

.....

Data data;
FillData(&data); // procedura za zadavanje
int insert_pos = 3; // recimo na trece mesto imamo oko 20 ak zapisa

 .....

ofstream ofile;
ofile.open("Dataoteka.dat" , ios::binary|ios::app);
ofile.seekp(insert_pos * sizeof(Data), ios::beg); // pozicioniranje od pocetka datoteke
ofile.write( (unsigned char*) &data , sizeof (Data) ); // Data - korisnicki definisan podatak
 .....

 


Kod sam pisao iz glave kompajler nije trenutno tu, ali je kod tacan, probao sam sa flagovima
ios::cur i razne akrobacije, ali bezuspesno - stalno ispisuje podatak na kraj fajla.

void HVALA (unapred);
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.tekostolac.co.yu.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: iostream - Insertovanje korisnicki definiaanih podataka18.10.2007. u 11:20 - pre 200 meseci
Koliko je meni poznato, ne postoji funkcionalnost "automatskog" umetanja podataka u FAJL stream, jer se to kosi sa načinom kako se zapisi fizički smeštaju na HD-u. Odnosno, nakon "ofile.open" najčešće nije ceo fajl učitan pa da se ima ideja o fizičkim granicama, niti je fajl najčešće fizički smešten u jednom komadu na disku. Naravno, moguce je napraviti funkciju koja umetanje radi u pozadini, pa deluje da je automatski.

Da bi se vršilo umetanje podataka u stream, potrebno je:
* Postaviti tačku upisa/čitanja na poziciju na koju želiš novi upis
* Kopirati sadržaj fajla od te tačke do kraja fajla i to najčešće u memoriju (za fajlove normalne veličine)
* Ponekad ovo prethodno pomeri tačku umetanja, pa je treba 'premotati' na staru poziciju
* Upisati nove podatke
* Upisati privremeni buffer od te tačke (nakon novih upisa) na dalje
* Zatvorti (snimiti) stream
 
Odgovor na temu

Duke Nukem
Miroslav Mitic
dipl.mas.ing - tehnolog za hidrauliku/
REL, MAG panciranje i zavarivanje bla
bla...
Lazarevac

Član broj: 38933
Poruke: 143
*.eunet.yu.



+1 Profil

icon Re: iostream - Insertovanje korisnicki definiaanih podataka19.10.2007. u 14:58 - pre 200 meseci
BCB nam daje fenomenalni objekat TList koji resave sve ovakve probleme.
Tako da je jednostavnije napuniti TList instancu pointerima na korisnicki
definisani objekat ucitavanjem iz fajla (datoteke), pa onda raditi sa njima sta je drago
i na kraju sve to snimiti (overwrite) u datoteku.

mozda ce se neki setiti vectora ili slicnog kontejnera iz STL ali na osnovu mojih iskustava u BCB
komotnije je i pouzdanije koristiti TList.

ps
Ovo vazi za korisnike BCB a ,Izvinjavam se onima koji ne koriste taj kompajler

Tape loading error
 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: iostream - Insertovanje korisnicki definiaanih podataka

[ Pregleda: 2499 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.