Объединить несколько фалов в один файл.
|
|
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 |
Сэнсэй
Сейчас нет на сайте
| Блин, я что-то на возможность "добавление файлов" внимания не обратил В таком случае по-другому: Таблицы у нас не будет. В начало архива записываем кол-во файлов (а можно даже и не записывать), а далее перед данными файла идет информация о нем(имя, размер). Структура с информацией фиксирована. Тогда, чтение например, будет выглядить следующим образом: Прочитали кол-во файлов, прочитали инфо о файле (размер известен), далее прочитали данные файла и переходим к инфе другого, и так можно до бесконечности =). Добавлять файл тоже очень просто, правда тут другие проблемы есть (поиск, etc), но это проще имхо. GECK, Ну можно как угодно впринципе =). Просто когда таблица расположена в конце, при добавлении нового файла в уже сформированный "архив", таблица запоминается и удаляется из архива, на ее место пишется новый файл и в конец добавляется измененная таблица(с информацией о добавленном файле).
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
|
|
| |
bond95 | Дата: Суббота, 25 Декабря 2010, 22:09 | Сообщение # 5 |
частый гость
Сейчас нет на сайте
| Я тоже хотел что то типа это только информацию о файлах записывать в другой файл, но так даже удобней
|
|
| |
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 |
частый гость
Сейчас нет на сайте
| ладно, можете уже закрывать тему, я разобрался.
|
|
| |