Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Архивация


Автор: Palladin 29.5.2008, 10:22
Как заархивировать WinRar-om(к примеру) определенные файлы?

Автор: UniBomb 29.5.2008, 11:54
Palladin, можно вызвть этот винрар с соответсвующими параметрами... Я в своё время делал что то наподобии вот этого:

Код

spawnlp(P_WAIT, "C:\\soft\\archiver\\WinRar\\WINRAR.exe", "WINRAR" , "A", path_save, path_open, NULL)


ЗЫ:. функия spawnlp запускает приложение и ждёт его завершение (основная программа при этом "виснет"), что мне и было нужно в той задаче..

Автор: THandle 29.5.2008, 12:17
Rar.exe + ShellExecute + Справка и по тому и по другому.

Автор: Palladin 29.5.2008, 12:28
1) Что подключить нужно? пишет мол нет такой функции
2) Расскажи что за параметры
первый я так понимаю стопит программу, второй это путь к винрару, а дальше кто такие?

Добавлено через 18 секунд
Тхандл спс щас гляну

Автор: Palladin 29.5.2008, 13:11
2Тхнадл
Вроде именно то что нужно, поискал по форуму, никак немогу разобратся какие параметры указать чтоб винрар упаковал то что укажет пользователь, не мог бы пояснить параметры, ну какнить так:
Код

ShellExecute(1,2,3,4,5,6);
1-?
2-команда на открытие видимо
3-Путь запускаемого файла, в моем случае путь к WinRar.exe
4-видимо какой файл покавать будем
5-видимо куда сохранять
6-???


С возможными вариантами если можно
ну по первому параметру тут видимо 
Null-ничего
P_WAIT-стопит видимо
вообщем хелп smile

Добавлено через 2 минуты и 5 секунд
Пишу так
Код

ShellExecute(NULL, _T("open"), _T("C:\\Program Files\\WinRAR\\WINRAR.exe"), "BD\\", "BD\\direct\\option.mdb", NULL);


дак он мне винрар открывает просто да и все, в котором моя option.mdb ну и можно заархивировать

Автор: UniBomb 29.5.2008, 13:37
Palladin, 
Глядим в хелп по винрару:

Цитата

 Общий синтаксис командной строки таков:
WinRAR <команда> -<ключ1> -<ключN> <архив> <файлы…> <@файл-список…> <путь для извлечения\>
...
Команда A — добавить в архив
Добавляет в архив указанные файлы и папки.
...


Таким образом получается что то типа того:

WinRar A C:\backup.rar C:\BD\direct\option.mdb

(результат - будет создан архив "backup.rar", в котором будет помещён файл "option.mdb")

Теперь лезем в MSDN и читаем про функцию. Получаем что то типа того:

Код

ShellExecute(NULL, NULL, "WinRar", "A C:\backup.rar C:\BD\direct\option.mdb", NULL, SW_SHOWNORMAL);


ЗЫ:. описание параметров функции недаю потому как незнаю как это по-русски написать)))

Автор: THandle 29.5.2008, 13:40
Palladin, вообще-то надо консольный rar использовать(rar.exe) smile

Вот такс значит попробуй:

Код

ShellExecute(Handle,
             "Open",
             "путь к rar.exe",
             "a имя_архива файл_или_папка_для_архивации",
             NULL,
             SW_HIDE); 


Сразу говорю, что C++ Builder'a нет( 
Так что возможно потребуются какие-нибудь приведения типов.

Вот полностью рабочий вариант на Делфи:

Код

ShellExecute(Handle,
             'Open',
             'L:\\Program Files\WinRAR\RAR.exe',
             'a D:\\Project1.rar Project1.exe',
             nil,
             SW_HIDE);

Автор: Palladin 29.5.2008, 14:11
А как указать степень сжатия на максимальный?smile
И еще как вбить это
Код

FormatDateTime("dd.mm.yyyy  hhhh:mmmm:ssss",Now());


в эту строку 
Код

..."A C:\сюда_формат_дате_тайм.rar C:\BD\direct\option.mdb"...


пробовал так 
Код

ShellExecute(NULL, NULL, "WinRar", "A archiv\\"+FormatDateTime("dd.mm.yyyy  hhhh:mmmm:ssss",Now())+".rar BD\\work", NULL, SW_SHOWNORMAL);


бьет ошибки
Код

[C++ Error] Unit5.cpp(197): E2034 Cannot convert 'AnsiString' to 'const char *'
[C++ Error] Unit5.cpp(197): E2342 Type mismatch in parameter 'lpParameters' (wanted 'const char *', got 'AnsiString')

Автор: Palladin 29.5.2008, 15:05
Разобрался сам
Код

ShellExecute(NULL, NULL, "WinRar", "A -ag archiv\\Archiv.rar BD\\work", NULL, SW_SHOWNORMAL);

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)