![]() |
|
|
![]()
|
|
| Fighter |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 810 Регистрация: 5.1.2005 Репутация: нет Всего: 2 |
Вы наверное играли в такие игры как Diablo II и Warcraft III. Компания Blizzard все необходимые файлы к своим играми "тщательно скрывает" в файлах типа MPQ. Как самому сделать что-нибудь подобное? Например, в ListBox'e я выбрал три файла
1. Music.mp3 2. Photo.jpg 3. Text.txt. Все эти три файла объеденены в один файл с именем datafile.dat. Потом я открываю файл datafile.dat и у меня в ListBox'e появляются эти файлы: 1. Music.mp3 2. Photo.jpg 3. Text.txt. причем, если я щелкну на Music.mp3 то начнется проигрывание музыки, если на Photo.jpg то откроется картинка в моей программе или сама Windows откроет её, ну соответственно если щелкну по Text.txt, то либо запустится Блокнот с текстом программы, либо текст откроет моя программа. Подскажите пожалуйста как это сделать? |
|||
|
||||
| En_t_end |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2074 Регистрация: 4.12.2004 Репутация: нет Всего: 20 |
Fighter
Зачем темы расплодил? Обьясняю подробно алгоритм... ИМХО... Берёшь первый файл, открываешь его в своём коде, как двоичный...узнаешь каким он был размером в байтах, ставишь первые байты, которые указывают на размер файла, записываешь далее сам файл в datafile.dat, надеюсь алгоритм считывания записи по-байтово расписывать не надо А вот тут уже интереснее, как проиграть или запустить ? Ах да ещё полезно и нужно, в начале datafile.dat указывать название запакованных файлов... читаем первые байты в твоём файле, анализируем... принимаем к сведению, читаем после информационных байтов до следующего инф. файла или столько байт, сколько занимал нужный файл... записываем извелёкшийся файл в TEMP, соблюдая правила имен и разрешений для вынды... запускаем из тэмпа creatprocess'ом нужный файл, и радуемся ЗЫ зачем велосипед изобретаешь |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 24 Всего: 98 |
перед запуском такой программы замускаем filemon, смотрим что/куда прога сохраняет и переписываем нужные файлы.
смысл такой защиты? что Diablo II что Warcraft III файлы используют сами, а если винду просить... -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Fighter |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 810 Регистрация: 5.1.2005 Репутация: нет Всего: 2 |
Это не защита, это просто для удобства!!! Вот пример, предположим в какой-нибудь игре у меня 2000 файлов, каждый пусть занимает по 2 кб (для примера), а размер твоего харда 80 Гб, размер кластера в нем 32Кб и поэтому потери информации будет в 16 раз больше, а если все файлы содержатся в одном, то тогда потеря будет не больше 32 Кб.
|
|||
|
||||
| chipset |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: нет Всего: 165 |
Нет. В FAT32 размер кластера - 4 кб. .. В таких случаях обычно запихивают все в контейнер STL и сериализуют boost::serialization'ом. --------------------
|
||||
|
|||||
| Fighter |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 810 Регистрация: 5.1.2005 Репутация: нет Всего: 2 |
Это смотря на каких винтах. Вообще это легко проверить, вот я щас вот создал текстовый документ и ввел в него один символ. По идее размер документа 1 байт, что верно, но если файл может занимать один кластер, но в одном кластере не может быть два файла, поэтому если размер файла меньше размера кластера, то на диске все равно занимается место размером в кластер. Ну так вот, я сохранил этот текстовый документ и смотрю его свойства (у меня HD 60 Гб). Меня интересует следующее:
Размер: 1 байт, 32 768 байт занято. 32 768 - вот оно, вот он размер кластера у меня на HD в 60 Гб. Но я знаю что в NTFS можно выбирать размер кластера. А можешь поподробнее про boost::serialization. |
|||
|
||||
| chipset |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: нет Всего: 165 |
http://boost.org/libs/serialization/doc/index.html --------------------
|
||||
|
|||||
| Fighter |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 810 Регистрация: 5.1.2005 Репутация: нет Всего: 2 |
А можете тогда ссылку кинуть на какой-нибудь сайт (или несколько сайтов) где можно будет скачать какие-нибудь MFC классы, ActiveX, VCL компоненты для работы с архивами.
|
|||
|
||||
| Helicopterr |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 355 Регистрация: 20.8.2005 Где: Stavropol Репутация: нет Всего: 3 |
да вот у кого есть ссылка на качнуть MFC классы?
-------------------- people can fly |
|||
|
||||
| szz |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1289 Регистрация: 31.5.2005 Где: Moscow, Jerusalem Репутация: 1 Всего: 33 |
Вот например неплохая библиотека:
http://www.artpol-software.com/index_zip.html Она довольно быстрая и хорошо, продуманно написана --------------------
|
|||
|
||||
![]()
|
| Правила форума "С++ Builder" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C++ Builder | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |