Jako, że piszę silnik połączony z grą, niemal koniecznością stało się użycie jakiegoś VFS. "Gotowca" nie chciałem - większość operuje na ANSI nazwach plików, do tego różnie sobie radzą z przezroczystością systemu plików (archiwa, rzeczywisty FS, priorytety itp.). Stąd powstało moje własne rozwiązanie - system SFFS z obsługą (własnych) archiwów SFA.
Struktura pliku SFA jest prymitywna - co okazało się być rozwiązaniem świetnie dobranym do wymagań. Obecna forma:
Nagłówek: [ Id: DWORD; Wersja: DWORD; IlośćPlików: DWORD; PozycjaPoczątkuNazw;]
foreach(DWORD < IlośćPlików) : NagłówekPliku [HashNazwy: MD5; PozycjaWSFA: DWORD; Rozmiar: DWORD;]
foreach(DWORD < IlośćPlików) : Plik : BAJTY;
foreach(DWORD < IlośćPlików) : NazwaPliku [ IlośćZnaków: DWORD; Nazwa: WCHAR*;]
Przez "nazwa" jest tu rozumiana ścieżka względna od katalogu głównego, z którego generowane jest archiwum. Jest to o tyle elastyczne, że - wczytując plik w grze - nie muszę rozbijać nazwy na poszczególne foldery, a w postaci podstawowej podaję ją do VFS i za jej pomocą szukam. Samo archiwum zajmuje też niewiele miejsca na dysku (chwilowo bez obsługi kompresji) względem rozmiaru źródłowego dla dużej ilości małych plików. Pakując w SFA 3.5GB źródeł udało mi się oszczędzić prawie 500MB miejsca na dysku (zajętego z powodu wyrównania plików do sektora na dysku).
Brak komentarzy:
Prześlij komentarz