Čitanje iz binarne datoteke (C++)
Prikazujem rezultate 1 do 9 od 9

Tema: Čitanje iz binarne datoteke (C++)

  1. #1
    Aktivan član Kurt2 (avatar)
    Učlanjen
    12.04.2005.
    Pol
    muški
    Lokacija
    Niš
    Poruke
    1.497
    Reputaciona moć
    61

    Podrazumevano Čitanje iz binarne datoteke (C++)

    Imam klasu Student, u njoj privatne atribute ime, prezime, indeks i dinamiči niz pod nazivom niz. Koristim fstream za upis u fajl, i to (valjda) prođe kako treba. Problem se javlja kod čitanja. Da li treba sam da kreiram dinamički niz ili ne? kako bi to uopšte išlo??? Za pisanje u fajl koristim funkciju u okviru klase koja se zove upis, i f-ja izgleda ovako:

    Kod:
    void Student::upis()
    {
    	ofstream os("podaci.dat", ios::binary);
    	os.write((char*) this, sizeof(this));	
    	os.close();
    }
    za čitanje sam hteo:

    Kod:
    void Student::citanje()
    {
    	ifstream is("podaci.dat", ios::binary | ios::nocreate);
    	
    	if( is ) 
    		is.read( (char *) this, sizeof(Student) );
    	is.close();
    }
    međutim, to ne ide kako treba... Da konkretizujem pitanje: kako da iz binarnog fajla čitam objekat koji ima dinamičke elemente?



  2. #2
    Primećen član
    Učlanjen
    04.03.2004.
    Lokacija
    UK
    Poruke
    558
    Reputaciona moć
    56

    Podrazumevano Re: Čitanje iz binarne datoteke (C++)

    Niz morash posebno da snimish, i to kao duzhina_niza + sadrzhaj_niza.
    Kad uchitavash to, prvo uchitash duzhinu niza, alocirash memoriju, pa na to mesto uchitash sadrzhaj niza (onoliko bajtova kolika je duzhina)

  3. #3
    Aktivan član Kurt2 (avatar)
    Učlanjen
    12.04.2005.
    Pol
    muški
    Lokacija
    Niš
    Poruke
    1.497
    Reputaciona moć
    61

    Podrazumevano Re: Čitanje iz binarne datoteke (C++)

    Čekaj, onda ispada da mi je ova gornja f-ja (upis) zapamtila samo statičke članove niza?

  4. #4
    Primećen član
    Učlanjen
    04.03.2004.
    Lokacija
    UK
    Poruke
    558
    Reputaciona moć
    56

    Podrazumevano Re: Čitanje iz binarne datoteke (C++)

    Ta funkcija ti je 'preslikala' binarni zapis klase, zajedno sa pointerom na niz.

  5. #5
    Aktivan član Kurt2 (avatar)
    Učlanjen
    12.04.2005.
    Pol
    muški
    Lokacija
    Niš
    Poruke
    1.497
    Reputaciona moć
    61

    Podrazumevano Re: Čitanje iz binarne datoteke (C++)

    A zašto posle čitanja ni te statičke podatke iz klase ne vidim, nego samo neke gluposti??? A i pointer na niz mi u datoteci ne treba jel da? Jel može kratak primer za upis dinamičkih elemenata u binarnu datoteku kao u mom slučaju? Hvala!!!

  6. #6
    Primećen član
    Učlanjen
    04.03.2004.
    Lokacija
    UK
    Poruke
    558
    Reputaciona moć
    56

    Podrazumevano Re: Čitanje iz binarne datoteke (C++)

    Zato shto si snimio cela 4 bajta :

    os.write((char*) this, sizeof(this));

    ... a "this" je pointer, chija je velichina 4 bajta (uglavnom).
    Trebalo je "sizeof(Student)" kao shto si uradio kod uchitavanja.

  7. #7
    Aktivan član Kurt2 (avatar)
    Učlanjen
    12.04.2005.
    Pol
    muški
    Lokacija
    Niš
    Poruke
    1.497
    Reputaciona moć
    61

    Podrazumevano Re: Čitanje iz binarne datoteke (C++)

    Ok, prepravio sam da bude student umesto this, i sada mi iz binarnog fajla iščita i statičke atribute i niz koji je dinamički, ali program na kraju pukne! Pretpostavljam da se radi o destruktoru, koji dinamički niz koji treba da obriše traži na pogrešnom mestu! Kako da sada pokazivač na niz koji je iščitan iz fajla "preusmerim" na traženu memorijsku lokaciju?

  8. #8
    Primećen član
    Učlanjen
    04.03.2004.
    Lokacija
    UK
    Poruke
    558
    Reputaciona moć
    56

    Podrazumevano Re: Čitanje iz binarne datoteke (C++)

    Nemoj da pretpostavljash, nego kad program krene da puca poteraj ga kroz debugger i nadji problem.

    U sluchaju da jeste destruktor - kada uchitavash tu klasu niz uvek kreiraj od nule, pa u njega uchitaj to shto je bilo u originalnom nizu. Pointeri se nikad ne snimaju i uchitavaju 'goli'

  9. #9
    Aktivan član Kurt2 (avatar)
    Učlanjen
    12.04.2005.
    Pol
    muški
    Lokacija
    Niš
    Poruke
    1.497
    Reputaciona moć
    61

    Podrazumevano Re: Čitanje iz binarne datoteke (C++)

    Problem jeste sa destruktorom. Evo main funkcije:

    Kod:
    #include "Student.h"
    #include <iostream.h>
    
    void main()
    {
    	Student Pera(3); //Kreira se objekat Pera tipa Student sa 3 ocene 
    	Pera.ucitaj(); //Učitavaju se podaci sa tastature (ime, prezime, indeks i tri ocene smeštene u dinamički niz)
    	Pera.upis(); //Podaci se upisuju u binarni fajl
    	Student Misa(3); //Kreira se drugi objekat - Misa tipa Student sa 3 ocene
    	Misa.citanje(); //Čita se sadržaj iz istog binarnog fajla u koji je prethodno upisan "Pera"
    	Misa.izbaci(); //Šalje se na ekran
    
    }
    Podaci uredno izlaze na ekran, što i očekujem za statičke atribute, ali se uredno izbacuju i ovi iz niza! To me čudi jer njih sam treba zasebno da učitam (što inače nigde nisam implementirao)! Kada se stigne do kraja programa, destruktor se poziva dva puta (za dva objekta), jedan prođe uredno, a kod drugog puca.
    Poslednji put ažurirao/la Kurt2 : 06.01.2006. u 16:30

Slične teme

  1. program - čitanje datoteke
    Autor statquos u forumu Programiranje
    Odgovora: 0
    Poslednja poruka: 05.06.2008., 16:48
  2. RAR datoteke
    Autor m0108994d u forumu Softver
    Odgovora: 6
    Poslednja poruka: 29.11.2006., 18:07
  3. datoteke
    Autor samo opusteno u forumu Programiranje
    Odgovora: 4
    Poslednja poruka: 03.08.2004., 14:52
  4. MIDI datoteke
    Autor JovanT u forumu Softver
    Odgovora: 4
    Poslednja poruka: 12.07.2004., 23:17

Pravila za slanje poruka

  • Ne možete kreirati novu temu
  • Ne možete poslati odgovor
  • Ne možete dodati priloge
  • Ne možete prepraviti svoju poruku
  •