Программное архивирование файлов
Народ, кто-нить знает, как можно в программе, используя внешний архиватор, получать соответственно от этого архиватора прогресс сжатия?
Смотри доки, SDK (если таковы есть) к архиватору позволяет ли он лезть другим процессам в нутрь. то есть подьерживает ли ActiveX или чето в этом духе.
Ну, вот, к примеру, у меня программа через определённое время делает копию базы, файл получается размером ~450Мб, хочу для сжатия использовать 7z (может кто посоветует лучше) с использованием ShellExecute(...). В этом случае есть возможность получать прогресс сжатия? а то 450Мб всё-таки довольно прилично по времени сжиматься будут...
если этот архиватор к примеру выводит прогрес в консоль
то можно перенаправить консоль на себя.
п.с. написал бы какой хоть архиватор
а то все ответы это пальцем в небо
то можно перенаправить консоль на себя.[/QUOTE]
ага, тока у меня-то не консольное приложение... и куда я буду перенаправлять мне интересно...
А насчёт своего архиватора - ты это загнул... даже если я его сваяю, то как потом назад распаковывать??? Это ж еще и прогу распаковки писать придётся... Да я уж лучше буду внешним вызовом архивировать в 7z или rar или просто zip...
Вывод дочернего процесса не обязательно перенаправлять на вывод своего процесса, и он даже не должен(!) быть консольным; как юзать, см. http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/createprocess.asp и http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/startupinfo_str.asp
[QUOTE=Xavier]А насчёт своего архиватора - ты это загнул... даже если я его сваяю, то как потом назад распаковывать??? Это ж еще и прогу распаковки писать придётся... Да я уж лучше буду внешним вызовом архивировать в 7z или rar или просто zip...[/QUOTE]
Ты, по-моему, не правильно понял bas-а...
По-поводу твоего вопроса, посмотри тут.
Слушай, мне у меня подобная проблема стояла. Я использовал для сжатия/распаковки ZLib (он Open Source) и, вообщем, решил таки проблему с прогресс-баром и т.д. И жмет не плохо и вопросов не было...
Код не кинешь? Было б неплохо посмотреть. Т.к. Zlib я качнул, а вот как им пользоваться хз... доков нема...
Вроде у MS в SDK описаны функции для архивирования файлов. Правда не знаю, что стало с этими функциями в новых версиях Windows.
Код:
start /wait /b "winrar Params > Output.txt"
Параметры берём из документации к RAR'у. Результат работы со всеми сообщениями окажется в указанном файле
Код:
start /wait /b "winrar Params > Output.txt"
Параметры берём из документации к RAR'у. Результат работы со всеми сообщениями окажется в указанном файле[/QUOTE]
То есть ты хочешь сказать, что пока файл архивируется, он будет скидывать в текстовый файл инфу о своём прогрессе, при этом данный текстовый файл будет открыт архиватором. Тогда, как же мне можно будет получить доступ к этому файлу? Ведь если он будет открыт одним процессом, то другой не сможет получить к нему доступ... имхо. А если даже сможет, так это каждый раз придётся открывать файл, считывать данные, закрывать... и так по кругу. Имхо, не гуманное раходование ресурсов!
Похоже функции LZFileOpenмогут лишь распаковывать файл...
http://prdownloads.sourceforge.net/sevenzip/7z442.tar.bz2?download
и доки там имхо есть...
я бы на твоем месте не парился бы с внешним архивером, а заюзал бы, ну хотя бы например, 7z :
и доки там имхо есть...