Odczyt / Zapis bianrnie

2013-03-27 22:41
0

Hej, cwicze binarnie zapisywac odczytywac z pliku.

i bylo by okey, tylko nie wiem gdzie jest blad, ze program zapisaną do pliku jedna tablice, po ponownym odpaleniu, wczytuje dwie, w tym pierwsza ta ktora byla zapisana plus jedna dodatkowa ale wyzerowana. Nie kminie skad to sie bierze.

//////////////////////////zapis pliku/////////////////////////
plik.open("dane.dat", ios::binary|ios::out|ios::trunc); 

if(pnt!=0)
{
    for(int i=0; i<pnt; i++)
    {
        baza[i]->Save_file(plik);
    }
}

plik.close();

///////////////////tutaj metoda klasy////////////////

void Tablica::Save_file(fstream& out)
{
    out.write((char*)&n, sizeof(int));
    out.write((char*)tab, n*sizeof(double));
}

//////////////////wczytywanie///////////////////////

if(plik.good())
    {
        while(!plik.eof())
        {
            plik.read((char*)&temp, sizeof(int));
            add_tab(temp, nazwa);
            plik.read((char*)baza[pnt-1]->adres(), temp*sizeof(double));
            baza[pnt-1]->srednia();
        }
    }
    plik.close();
///////////////////////////////////////////////////////

najpierw zapisuje rozmiar tablicy a pozniej jej elementy, tak samo je odczytuje. I tu jest okey, tablica jest dobrze wczytywana. Tylko nie wiem skad bierze sie jedna ponad rozmiar, o 0 elementach?? Przeciez wczytywana jest dopoki pokaze sie eof(). a jak zapisujemy jedna, no to plik powinien sie konczyc po niej. ?

edytowany 2x, ostatnio: No0b_, 2013-03-27 22:41
eof jest zapalana po przekroczeniu pliku. - n0name_l 2013-03-28 06:13

Pozostało 580 znaków

2013-03-28 10:17
0

odczytywać masz dokładnie tak samo jak zapisujesz:

void Tablica::Load_file(fstream &inp)
  {
   inp.read((char*)&n, sizeof(int));
   // tu ewentualnie przydzielenie pamięci dla tab
   inp.read((char*)tab,n*sizeof(double));
  }

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0