В принципе она работает. Я попытался пихнуть ее в консольное приложение - все отлично работает, но выгружает только файлы, лежащие в корне пака. Например, titles.txt выгружает, а models\barney.mdl - нет. Никак не могу понять в чем проблема. И собственно - в чем проблема?
Alex_Gordon писал: Я идиот! Слэш не в ту сторону ставил
известная трабла. Наверное все на эти грабли хоть раз, да наступали.
Еще следи, чтобы у тебя там был stricmp вместо strcmp. В паках регистр не учитывается. Точнее говоря программки для создания паков его игнорируют.
Цитата:
Alex_Gordon писал: Слушайте, а не подскажете какую-нибудь функцию для записи файла в пак?
Функцию не подскажу, но могу объяснить принцип на пальцах.
В самом начале файла у нас лежит два LittleLong.
Первый содержит в себе буквы PACK - это идентификатор.
Второй - смещение от начала файла до оглавления. Оглавление находится в самом конце файла, и поскольку его размер заранее неизвестен, то высчитать оффсет с конца файла не получится да и не нужно.
Принцип записи для простого, ламерского варианта:
1. открываем пак
2. считываем всё файло в память\делаем копию пака в виде tmp-файла
3. создаем новый пак
4. пишем туда идентификатор PACK, и пустую переменную в 4 байта.
5. записываем дальше все наши файлы как были
6. записываем новый файл, делаем отметку о новом файле в оглавлении (имя, начало и размер), само оглавление пока лежит в памяти
7. запоминаем место записи последнего файла, сохраняем в переменную то что вернет ftell
8. пишем наше новое оглавление (с учетом добавленного файла)
9. возвращаемся в начало + 4 байта и записываем то что нам вернул ftell в седьмом пункте.
10.Профит
Принцип записи для красивого проффесионального варианта:
1.открываем пак
2.считываем оглавление в память
3.добавляем в оглавление наш новый файлик (оглавлениев памяти)
4.делаем fssek на начало оглавление и перезатираем его новым файлом
5.запоминаем где конец файла при помощи ftell, сохраняем в переменную
6.пишем оглавление (с учетом добавленного файла)
7.возвращаемся в начало + 4 байта и записываем то, что нам вернул ftell в шестом пункте
8.Профит
Добавлено 13-06-2011 в 18:59:
ЗЫ. Если уж совсем никак непонятно - открой в ксаше filesystem.c, промотай в самый конец и кури работу с вадами, там будет добавлялка лумпов в вад, по вышеописанному принципу. Хотя вад это и не пак, но они во многом схожи, будет проще разобраться на примере.
Добавлено 13-06-2011 в 19:03:
Упс. Я извиняюсь, я этот функционал вырезал из финальной версии ксаша.
Вот в аттаче старая версия, где он еще имеется.
Вложение: fs.zip (24.6 кб)
Этот файл был скачан 179 раз.