Programowanie > C/C++ - KDE/Qt
qt i binarny zapis/odczyt
mody:
SuSe 9.3. Evaluating
1. Kaffeine, jukebox nie chcą odtwarzać plików z dysków windowsa (ntfs). Pojawia się komunikat że mozna odtwarzać tylko z dysków lokalnych.
Mam też MPlayera i XMMSa i one nie mają już takich problemów.
2. Skojarzyłem sobie pliki filmowe z MPlayerem. Gdy klikam na plik na dysku Windy otwiera się MPlayer i powinien odtwarzać film. Niestety on rzuca komunikat że nie może znaleźć pliku w katalogu domowym... dopiero gdy skorzystam z open.. wtedy działa jak trzeba..
Czy ktoś mógłby mi poradzić gdzie są jakieś możliwości ustawień??
amdfanatyk:
szlag mnie trafia bo mecze sie juz dlugo zeby zrzucic egzemplarz obiektu klasy do pliku i plik jest tworzony ale jak go wyedytuje to sa same zera i z reszta program takze zachowuje sie tak, jakby danych tam nie bylo :[
oto fragment kodu:
QFile * fout = new QFile(dir.path() + "/data");
fout->open(IO_WriteOnly);
fout->writeBlock((char *)data, sizeof(data));
fout->close();
delete fout;
QFile * fin = new QFile(dir.path() + "/data");
fin->open(IO_ReadOnly);
fin->readBlock((char *)data, sizeof(data));
fin->close();
delete fin
i co ja tu zle robie??
amdfanatyk:
ja zawsze blad znajde jak posta umieszcze dopiero :]
sizeof((*data))
amdfanatyk:
jednak jest problem :(
//mam jakas tam klase np
CKlasa * data = new CKlasa;
// ma ona zmienne w sekcji prywatnej i akcesory w publicznej
// i funkcje do zapisu
QFile * fout = new QFile(dir.path() + "/data");
fout->open(IO_WriteOnly);
fout->writeBlock((char *)data, sizeof(*data));
fout->close();
delete fout;
-----------------------------------------------
CKlasa * data = new CKlasa;
// i odczytu danych
QFile * fin = new QFile(dir.path() + "/data");
fin->open(IO_ReadOnly);
fin->readBlock((char *)data, sizeof(*data));
fin->close();
delete fin
gdy w programie najpierw zapisze dane do pliku pierwsza funkcja i odczytam druga to jest ok ale gdy zamkne program i przerobie kod tak, ze funkcja zapisujaca jest wykomentowana i uruchamia sie tylko ta, ktora czyta dane, to dostaje komunikaty typu:
QGArray: Cannot allocate array with negative length
Naruszenie ochrony pamięci
terminate called after throwing an instance of 'std::bad_alloc'
what(): St9bad_alloc
Przerwane
i generealnie naruszenie ochrony pamieci :[ nie rozumiem w czym tu jest problem :((((
xis:
2005-08-03 12:24:51 amdfanatyk napisał:
> jednak jest problem :(
>
> //mam jakas tam klase np
> CKlasa * data = new CKlasa;
> // ma ona zmienne w sekcji prywatnej i akcesory w publicznej
>
> // i funkcje do zapisu
> QFile * fout = new QFile(dir.path() + "/data");
>
> fout->open(IO_WriteOnly);
> fout->writeBlock((char *)data, sizeof(*data));
> fout->close();
>
> delete fout;
>
> -----------------------------------------------
>
> CKlasa * data = new CKlasa;
>
> // i odczytu danych
>
> QFile * fin = new QFile(dir.path() + "/data");
>
> fin->open(IO_ReadOnly);
> fin->readBlock((char *)data, sizeof(*data));
> fin->close();
>
> delete fin
>
> gdy w programie najpierw zapisze dane do pliku pierwsza funkcja i odczytam druga to jest ok ale
> gdy zamkne program i przerobie kod tak, ze funkcja zapisujaca jest wykomentowana i uruchamia sie
> tylko ta, ktora czyta dane, to dostaje komunikaty typu:
>
> QGArray: Cannot allocate array with negative length
> Naruszenie ochrony pamięci
>
> terminate called after throwing an instance of 'std::bad_alloc'
> what(): St9bad_alloc
> Przerwane
>
> i generealnie naruszenie ochrony pamieci :[ nie rozumiem w czym tu jest problem :((((
Nigdy nie bawiłem się w zapis binarny do pliku w C++. Wydaje mi się jednak, że skoro używasz sizeof( *data );, a wielkość klasy uległa zmianie (wykasowałeś jedną metodę), to może odczyt jest nieudany, bo w pliku nie natrafiamy na egzemplarz IDENTYCZNEJ klasy, tylko takiej, która jest mniejsza o jedną metodę.
To jest właśnie wada zapisu obiektów binarnie, każda zmiana (wystarczy zmienić typ dowolnej składowej, najwyraźniej metody też są na to podatne), a od razu dyskwalifikuje odczyt z pliku.
Ale - jak już mowiłem - nie testowałem zapisu binarnego w C++, a jedynie w C i nie mam pewności czy w ogóle zapis adresów metod występuje w pliku binarnym.
Nawigacja
[#] Następna strona
Idź do wersji pełnej