Сейчас на форуме: tyns777 (+5 невидимых)

 eXeL@B —› Программирование —› Программа и RaR архивы (их модификация) C++Builder
Посл.ответ Сообщение

Ранг: 20.2 (новичок)
Активность: 0.010
Статус: Участник

Создано: 04 октября 2007 11:29
· Личное сообщение · #1

Доброго времени суток!
Все RaR архивы начинаются с ::Rar!:: в заголовке файла.
Хочу использовать в своей программе архивы, которе будут содержать скины для моей программы.
В тоже время хотелось бы, чтобы их нельзя было открыть WinRAR'ом.
Я создаю данный архив, убираю в нем этот заголовок.
1. Как сделать так, чтобы программа дописывала этот заголовок в файл при работе с ним, а после убирала?
2. Как загружать в память файлы из этого архива (допустим рисунок)?
Желательно не использовать дополнительных компонентов, а работать только с unrar.dll.
Заранее спасибо.




Ранг: 141.4 (ветеран)
Активность: 0.050
Статус: Участник

Создано: 04 октября 2007 11:37 · Поправил: intro
· Личное сообщение · #2

Ну так в чём проблема? При открытии файла пиши первые байты в файл архива (почитай про fopen, fread, fwrite), затем загрузи данные из архива или просто распакуй скин во временную директорию и работай дальше с распакованными файлами, а затем просто затри первые байты архива, или запиши туда свою сигнатуру.

KVinD пишет:
Как загружать в память файлы из этого архива (допустим рисунок)?

гугл поможет

и вообще - изучай WinAPI.




Ранг: 68.0 (постоянный), 6thx
Активность: 0.060
Статус: Участник

Создано: 04 октября 2007 11:57 · Поправил: Dr3d
· Личное сообщение · #3

KVinD пишет:
2. Как загружать в память файлы из этого архива (допустим рисунок)?

Выделяешь память нужного размера malloc(size), эта функция возвращает указатель на выделеннею память.
Потом просто копируешь туда картинку

HANDLE hFile;
DWORD RWB;
int Size;
char* mem; //использую char*, потому что с void* часто бывают проблемы при приведении типов

hFile = CreateFile("Picture.jpg", GENERIC_READ, 0,0, OPEN_EXISTING,0,0);
Size = GetFileSize(hFile, 0);
mem = (char*)malloc(Size);
ReadFile(hFile, mem, Size, &RWB, 0);





Ранг: 247.7 (наставник), 3thx
Активность: 0.160
Статус: Участник
Халявщик

Создано: 04 октября 2007 12:08
· Личное сообщение · #4

Я бы с RAR заморачиваться не стал, сделал бы собственный формат

-----
Лень - это подсознательная мудрость




Ранг: 20.2 (новичок)
Активность: 0.010
Статус: Участник

Создано: 04 октября 2007 12:16
· Личное сообщение · #5

Спасибо intro, Dr3d.
depler можно поподробнее и какой-нибудь пример, пожалуйста.




Ранг: 247.7 (наставник), 3thx
Активность: 0.160
Статус: Участник
Халявщик

Создано: 04 октября 2007 12:28
· Личное сообщение · #6

примера у мня нет, но принцип такой что создаешь новый тип данных твоего скина(в котором рисунки, координаты окон и т.д.), а в файл скина зщаписываешь все это дело потоками через createstream.

-----
Лень - это подсознательная мудрость




Ранг: 20.2 (новичок)
Активность: 0.010
Статус: Участник

Создано: 04 октября 2007 12:32
· Личное сообщение · #7

Спасибо, буду разбираться.




Ранг: 247.7 (наставник), 3thx
Активность: 0.160
Статус: Участник
Халявщик

Создано: 04 октября 2007 12:35
· Личное сообщение · #8

В тоже время хотелось бы, чтобы их нельзя было открыть WinRAR'ом.
просто интересно а зачем, у тя в скинах секретные данные?

В принципе можно архив с паролем запаковать, а потом из проги расшифровывать через unrar.dll

-----
Лень - это подсознательная мудрость





Ранг: 605.2 (!), 341thx
Активность: 0.470.25
Статус: Модератор
Research & Development

Создано: 04 октября 2007 12:47
· Личное сообщение · #9

используй 7-Zip контейнер с AES шифрованием, пароль внутри проги скрой, чтобы он не был виден в явном виде. распаковщик 7-Zip архивов прилинкуй статически, чтобы не было явныйх вызовов с указанием пароля.
но я не вижу смысла в подобных действиях, учитывая тот факт, что в нормальных прогах, поддерживающих скины, предусмотрено создание шкурок пользователями, которые зачастую делают шкурки получше автора программы. так что не трать времени впустую, сделай открытый формат скинов и займись более полезным функционалом твоей программы.

-----
EnJoy!





Ранг: 141.4 (ветеран)
Активность: 0.050
Статус: Участник

Создано: 04 октября 2007 13:14
· Личное сообщение · #10

depler дело говорит - можно сделать архив с паролем и все дела, если надо, то можно добавить и шифрование имён файлов.

Jupiter пишет:
не трать времени впустую, сделай открытый формат скинов и займись более полезным функционалом твоей программы

согласен на 100%. скины для того и существуют, собственно.



Ранг: 20.2 (новичок)
Активность: 0.010
Статус: Участник

Создано: 04 октября 2007 13:38
· Личное сообщение · #11

Учел все, что Вы сказали, СПАСИБО всем. Буду пробовать все, ибо надо учиться всему




Ранг: 605.2 (!), 341thx
Активность: 0.470.25
Статус: Модератор
Research & Development

Создано: 04 октября 2007 14:14
· Личное сообщение · #12

проблема при использовании пароля и внешней длл для распаковки в том, что пароль передаётся в явном виде и его можно перехватить через перехват RARSetPassword или обработку UCM_NEEDPASSWORD в callback ф-ции обработки архива.

-----
EnJoy!




Ранг: 20.2 (новичок)
Активность: 0.010
Статус: Участник

Создано: 04 октября 2007 14:23
· Личное сообщение · #13

Учтем, спасибо


 eXeL@B —› Программирование —› Программа и RaR архивы (их модификация) C++Builder
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати