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

c++ rad sa .bin datotekom

[es] :: C/C++ programiranje :: c++ rad sa .bin datotekom

[ Pregleda: 100803 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Lukic111
Marko Lukic
Beograd,Srbija

Član broj: 259787
Poruke: 51
*.static.isp.telekom.rs.



+8 Profil

icon c++ rad sa .bin datotekom14.01.2013. u 10:25 - pre 137 meseci
Pokusavam da obrisem jednu strukturu iz binarne datoteke imenik.bin, ali po ovom algoritnu ne radi.
Jel ima neko resenje ?


Code:
void brisanje(void)
{
    char ime[30];

    f1.open("imenik.bin",ios::in | ios::out| ios::binary);

    if (!f1)
    {
        cout<<"Greska pri otvaranju datoteke";
        exit(1);
    }

    f2.open("pom.bin",ios::in | ios::out | ios::binary);

    if (!f1)
    {
        cout<<"Greska pri otvaranju pomocne datoteke";
        exit(1);
    }

    f1.seekg(0,ios::beg);

    while (1)//kopira iz jedne datoteke u drugu
    { 
        f1.read((char*)&osoba,sizeof(struct adresar));

        if (f1.eof()!=0) break;

        f2.write((char*)&osoba,sizeof(struct adresar));
    }

    f1.seekp(0,ios::beg);f2.seekg(0,ios::beg);

    cout<<"\nUnesite ime koje zelite da obrisete "; cin>>ime;

    while (1)
    {
        f2.read((char*)&osoba,sizeof(struct adresar));

        if (f2.eof()!=0) break;

        if (strcmp(ime,osoba.ime)==0) continue; 

        f1.write((char*)&osoba,sizeof(struct adresar)); 
    }

    f1.close();
    f2.close();

    glavni_meni();
}


 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Moderator
Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: c++ rad sa .bin datotekom14.01.2013. u 10:40 - pre 137 meseci
Kako se to vidi da ne radi? Daj detalje, ne znamo da čitamo misli.
 
Odgovor na temu

Lukic111
Marko Lukic
Beograd,Srbija

Član broj: 259787
Poruke: 51
*.static.isp.telekom.rs.



+8 Profil

icon Re: c++ rad sa .bin datotekom14.01.2013. u 14:32 - pre 137 meseci
Ovako ovaj deo koda treba da kopira iz imenik.bin (gde se nalazi struktura ) u pom.bin, to uradi dobro (sadrzaji te dve datoteke su isti kada se otvore).

while (1)//kopira iz jedne datoteke u drugu
{
f1.read((char*)&osoba,sizeof(struct adresar));

if (f1.eof()!=0) break;

f2.write((char*)&osoba,sizeof(struct adresar));
}


Posle toga kopira iz pom.bin u imenik.bin sve structure sem one koje sadrze uneseno ime.

while (1)
{
f2.read((char*)&osoba,sizeof(struct adresar));

if (f2.eof()!=0) break;

if (strcmp(ime,osoba.ime)==0) continue;

f1.write((char*)&osoba,sizeof(struct adresar));
}

Ali I tada kada otvorim obe datoteke nalazi se isti sadrzaj.

Nadam se da je sada ok objasnjenje ako nije poslacu ceo projekat.
 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Moderator
Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: c++ rad sa .bin datotekom14.01.2013. u 14:53 - pre 137 meseci
Postoje dve mogućnosti, prva je da se fajl imenik.bin nije uopšte ni promenio, niti je išta u njega upisano, a druga je da je u njega uspisan istovetan sadržaj. Moraš nekako da odbaciš jednu od ove dve mogućnosti, tako da znamo gde da gledamo dalje.

Ako fajl nije uopšte promenjen onda treba videti zašto. Ako je fajl promenjen tako da je isti kao što je i bio onda je verovatno problem što se nikad ne izvrši onaj continue, to jest funkcija strcmp nikad ne vrati nulu. Probaj da debaguješ korak po korak i vidiš šta se dešava u tom delu sa strcmp/continue. U Visual Studiu debagovanje je lakše ako je svaka instrukcija u posebnoj liniji, i na tvom mestu ja bih za potrebe debagovanja ovaj continue stavio u posebnu liniju, iako ne radiš u VS.
 
Odgovor na temu

Lukic111
Marko Lukic
Beograd,Srbija

Član broj: 259787
Poruke: 51
*.static.isp.telekom.rs.



+8 Profil

icon Re: c++ rad sa .bin datotekom14.01.2013. u 15:24 - pre 137 meseci
strcmo pradi regularno to sam proverio u deubug-modu a evo poslavu ti ceo projekat da vidis, ja sam probao sve zivo da menjam ali ne vredi.
Opcija 4 je za brisanje.

http://rapidshare.com/files/30...ojvodic%20seminarski%20rad.rar
 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Moderator
Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: c++ rad sa .bin datotekom14.01.2013. u 15:33 - pre 137 meseci
Jesi li proverio da li se fajl uopšte menja? Umesto koda koji ispisuje sličan sadržaj u fajl napravi kod koji ispisuje nešto totalno različito i vidi šta se nalazi u fajlu. Ako se u fajlu ne nalazi to totalno različito onda se fajl nije ni promenio. Možda je to totalno različito upisano u fajl koji se nalazi negde drugde.
 
Odgovor na temu

Lukic111
Marko Lukic
Beograd,Srbija

Član broj: 259787
Poruke: 51
*.static.isp.telekom.rs.



+8 Profil

icon Re: c++ rad sa .bin datotekom14.01.2013. u 15:57 - pre 137 meseci
Meni se cini da u opste ne menja sadrzaj datoteke imenik.pom.

while(1){

f2.read((char*)&osoba,sizeof(struct adresar));
if(f2.eof()!=0)
break;
if(strcmp(ime,osoba.ime)==0)
continue;
strcpy(osoba.ime,"TEST");
f1.write((char*)&osoba,sizeof(struct adresar));


}

posle ovoga imena ostaju ne promenjena.
 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Moderator
Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: c++ rad sa .bin datotekom14.01.2013. u 16:13 - pre 137 meseci
Otkud sad imenik.pom? Dva fajla su imenik.bin i pom.bin.
 
Odgovor na temu

Lukic111
Marko Lukic
Beograd,Srbija

Član broj: 259787
Poruke: 51
*.static.isp.telekom.rs.



+8 Profil

icon Re: c++ rad sa .bin datotekom14.01.2013. u 16:31 - pre 137 meseci
Izvini greska u kucanju imenik.bin
 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Moderator
Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: c++ rad sa .bin datotekom14.01.2013. u 17:07 - pre 137 meseci
Pošto se fajl ne menja treba videti zašto. To ti moraš da vidiš. Možda se fajl kreira na nekom drugom mestu. Možda nemaš prava da upisuješ u fajl.

U svakom slučaju moraš da imaš hendlovanje grešaka, koje trenutno ne postoji u kodu. Pretpostavljam da su promenljive f1 i f2 tipa ostream. Funkcija ostream::write vraća grešku na dva načina, jedno je preko izuzetaka, a drugo je pomoću funkcije ios::bad. Preporučujem da uključiš rad sa izuzecima, pomoću funkcije ios::exceptions, i da onda hvataš izuzetke pomoću try-catch koda.
 
Odgovor na temu

[es] :: C/C++ programiranje :: c++ rad sa .bin datotekom

[ Pregleda: 100803 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

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