B. duże pliki w C++

0

Czy wie ktoś jak rozwiązać zapis dużych plików w C++ a dokładniej

buduję bazę danych utworów mp3

w klasie mam pola

                        int ile;
                        char autor[100000][40];
                        char tytul[100000][40];
                        char album[100000][40];
                        char info[100000][1000];
                        char nazwapliku[100000][200];
                        char nazwa[100000][100];
                        int priorytet[100000];
                        char kategoria[100000][20];
                        char podkategoria[100000][20];
                        int fade[100000];
                        bool zablokowane[100000];
                        int id[100000];

oczywiście tworzone dynamicznie ;)

i gdy próbuje to zapisać to wyskakuje EAccessViolation :( a plik ma tylko 1 mb a samo pole autor ma około 4 mb :| próbowałem zapisać po kolei tylko tyle rekordów ile używam lecz wtedy przy przepisywaniu do struktóry wyskoczył ten sam błąd :( co i teraz mam

funkcja zapisująca

                fstream plik;
                plik.open("osoba.bin", ios::out | ios::binary);
                plik.write((char*)this,sizeof(int)
                 + sizeof(char)*40*100000
                 + sizeof(char)*40*100000
                 + sizeof(char)*40*100000
                 + sizeof(char)*1000*100000
                 + sizeof(char)*200*100000
                 + sizeof(char)*100*100000
                 + sizeof(char)*40*100000
                 + sizeof(int)*100000
                 + sizeof(char)*20*100000
                 + sizeof(char)*20*100000
                 + sizeof(int)*100000
                 + sizeof(bool)*100000
                 + sizeof(int)*100000
                +2 );
                plik.close();
0

Człowieku, openisiałeś? Jedna instancja struktury to 'tylko' 140MB. Za nazwanie tego bazą danych od kogoś z branży bazodanowej dostałbyś w dziób. Ech, kolejny student i zero pomyślunku, nawet sizeof-a użyć nie potrafisz. Ile naprawdę miejsca potrzebujesz, 140MB czy 14kB? Zrób sensowne struktury, wrzuć w listę i to zapisuj i odczytuj.

...a z kodem może być jeszcze wiele rzeczy nie tak. Założę się, że to Twoje 'tworzone dynamicznie'. BTW ios_base::binary nie ma znaczenia przy basic_ostream::write.

0

buahaha, to chyba tylko do perełek się nadaje

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