Среда, 11 Декабря 2024, 02:58

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Объединить несколько фалов в один файл.
bond95Дата: Суббота, 25 Декабря 2010, 13:49 | Сообщение # 1
частый гость
Сейчас нет на сайте
Доброго времени суток. Вот вопрос, как объединить несколько файлов, а потом при потребности добавить в тот файл еще несколько файлов. Очень похоже на архиватор, только файлы сжимать не надо.



Сообщение отредактировал bond95 - Суббота, 25 Декабря 2010, 14:43
ArchidoДата: Суббота, 25 Декабря 2010, 20:51 | Сообщение # 2
Сэнсэй
Сейчас нет на сайте
bond95,
Хм, ну если я все правильно понял, то примерно можно так:

Чтобы знать, в каком месте "архива" хранятся файлы требуется файловая таблица, скажем. В ней хранится имя файла, его размер, и смещение в нашем архиве. Три параметра. Они фиксированы. У таблицы должен быть заголок - количество файлов в ней.

Проходимся по всем нужным файлам и заполняем эту таблицу, заносим в заголовок количество файлов. Далее поочередно записываем файлы в архив, запоминая и добавляя смещения в таблицу. После записи файлов, в конец дописываем саму таблицу.
В самом начале архива еще нужно добавить "смещение до таблицы", т.е. после записи всех файлов, требуется запомнить смещение в архиве и дописать его в начало. + к смещениям файлов еще 4 байта(смещение таблицы).

Как то так.


C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
GECKДата: Суббота, 25 Декабря 2010, 21:23 | Сообщение # 3
заслуженный участник
Сейчас нет на сайте
Согласен с Archido, только я бы таблицу в начало файла записывал. Ты же знаешь ее размер перед записью, и можешь рассчитать его из заголовка. А если таблицу сделать с запасом(сразу на 1024 файла например), то в конец дописывать файлы будет проще.

Всё гениальное просто. И хреново работает.
ArchidoДата: Суббота, 25 Декабря 2010, 21:38 | Сообщение # 4
Сэнсэй
Сейчас нет на сайте
Блин, я что-то на возможность "добавление файлов" внимания не обратил biggrin
В таком случае по-другому:

Таблицы у нас не будет. В начало архива записываем кол-во файлов (а можно даже и не записывать), а далее перед данными файла идет информация о нем(имя, размер). Структура с информацией фиксирована. Тогда, чтение например, будет выглядить следующим образом: Прочитали кол-во файлов, прочитали инфо о файле (размер известен), далее прочитали данные файла и переходим к инфе другого, и так можно до бесконечности =).

Добавлять файл тоже очень просто, правда тут другие проблемы есть (поиск, etc), но это проще имхо.

GECK, Ну можно как угодно впринципе =). Просто когда таблица расположена в конце, при добавлении нового файла в уже сформированный "архив", таблица запоминается и удаляется из архива, на ее место пишется новый файл и в конец добавляется измененная таблица(с информацией о добавленном файле).


C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
bond95Дата: Суббота, 25 Декабря 2010, 22:09 | Сообщение # 5
частый гость
Сейчас нет на сайте
Я тоже хотел что то типа это только информацию о файлах записывать в другой файл, но так даже удобней biggrin

FlowДата: Суббота, 25 Декабря 2010, 22:13 | Сообщение # 6
-=[.FSProduction.]=-
Сейчас нет на сайте
А сшить файлы, можешь командой консоли: copy /b
Пример:
copy /b texture.jpg+texture2.jpg+texture3.jpg pseudoarchive.arc

Добавлено (25.12.2010, 22:13)
---------------------------------------------
И получишь все перечисленные файлы зашитыми в один pseudoarchive.arc (название и расширение можешь поставить любое)

bond95Дата: Суббота, 25 Декабря 2010, 22:30 | Сообщение # 7
частый гость
Сейчас нет на сайте
А разшить как?

FlowДата: Суббота, 25 Декабря 2010, 23:32 | Сообщение # 8
-=[.FSProduction.]=-
Сейчас нет на сайте
bond95, ручками или распаковщик пиши...
simtikoДата: Суббота, 25 Декабря 2010, 23:47 | Сообщение # 9
почти ветеран
Сейчас нет на сайте
bond95, При архивировании, добавляй в конец файла идентификатор. Распаковщик должен будет только разделить файл, считая позиции идентификатора.

Короче это уже дело техники, и все зависит от того на чем пишешь.

bond95Дата: Воскресенье, 26 Декабря 2010, 01:36 | Сообщение # 10
частый гость
Сейчас нет на сайте
ладно, можете уже закрывать тему, я разобрался.

  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг