| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > Запись файлов!!! |
| Автор: Fighter 9.1.2005, 03:55 |
| Вы наверное играли в такие игры как 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 9.1.2005, 07:38 |
| Fighter Зачем темы расплодил? Обьясняю подробно алгоритм... ИМХО... Берёшь первый файл, открываешь его в своём коде, как двоичный...узнаешь каким он был размером в байтах, ставишь первые байты, которые указывают на размер файла, записываешь далее сам файл в datafile.dat, надеюсь алгоритм считывания записи по-байтово расписывать не надо А вот тут уже интереснее, как проиграть или запустить ? Ах да ещё полезно и нужно, в начале datafile.dat указывать название запакованных файлов... читаем первые байты в твоём файле, анализируем... принимаем к сведению, читаем после информационных байтов до следующего инф. файла или столько байт, сколько занимал нужный файл... записываем извелёкшийся файл в TEMP, соблюдая правила имен и разрешений для вынды... запускаем из тэмпа creatprocess'ом нужный файл, и радуемся ЗЫ зачем велосипед изобретаешь |
| Автор: _hunter 9.1.2005, 22:25 |
| перед запуском такой программы замускаем filemon, смотрим что/куда прога сохраняет и переписываем нужные файлы. смысл такой защиты? что Diablo II что Warcraft III файлы используют сами, а если винду просить... |
| Автор: Fighter 10.1.2005, 02:37 |
| Это не защита, это просто для удобства!!! Вот пример, предположим в какой-нибудь игре у меня 2000 файлов, каждый пусть занимает по 2 кб (для примера), а размер твоего харда 80 Гб, размер кластера в нем 32Кб и поэтому потери информации будет в 16 раз больше, а если все файлы содержатся в одном, то тогда потеря будет не больше 32 Кб. |
| Автор: chipset 10.1.2005, 03:31 | ||
Нет. В FAT32 размер кластера - 4 кб. .. В таких случаях обычно запихивают все в контейнер STL и сериализуют boost::serialization'ом. |
| Автор: Fighter 10.1.2005, 03:36 |
| Это смотря на каких винтах. Вообще это легко проверить, вот я щас вот создал текстовый документ и ввел в него один символ. По идее размер документа 1 байт, что верно, но если файл может занимать один кластер, но в одном кластере не может быть два файла, поэтому если размер файла меньше размера кластера, то на диске все равно занимается место размером в кластер. Ну так вот, я сохранил этот текстовый документ и смотрю его свойства (у меня HD 60 Гб). Меня интересует следующее: Размер: 1 байт, 32 768 байт занято. 32 768 - вот оно, вот он размер кластера у меня на HD в 60 Гб. Но я знаю что в NTFS можно выбирать размер кластера. А можешь поподробнее про boost::serialization. |
| Автор: chipset 10.1.2005, 03:38 | ||
http://boost.org/libs/serialization/doc/index.html |
| Автор: Fighter 10.1.2005, 03:41 |
| А можете тогда ссылку кинуть на какой-нибудь сайт (или несколько сайтов) где можно будет скачать какие-нибудь MFC классы, ActiveX, VCL компоненты для работы с архивами. |
| Автор: Helicopterr 1.10.2005, 22:26 |
| да вот у кого есть ссылка на качнуть MFC классы? |
| Автор: szz 10.10.2005, 12:39 |
| Вот например неплохая библиотека: http://www.artpol-software.com/index_zip.html Она довольно быстрая и хорошо, продуманно написана |