![]() |
|
|
#1
|
||||
|
||||
|
Как программно распоковать файл RAR и открыть его в программе??
Например: Архив TEST.rar в нем файл file.txt его надо распокавать и открыть в мемо, как это сделать? ![]() |
|
#2
|
|||
|
|||
|
1 вариант. Идешь на torry.ru, качаешь любой понравившийся компонент распаковки RAR'а, ставишь его. При работе распаковываешь во временную папочку и оттуда открываешь.
2 вариант. Пользуемся консольным варианторм RAR'а. Через CreateProcess запускаем распаковку файла, дожидаемся окончания процесса и читаем файл. |
|
#3
|
||||
|
||||
|
|
|
#4
|
||||
|
||||
|
Я архивировал через rar.exe (консольный rar)
И с помощью функции ExecOSCommand передавал нужные параметры сама функция: Код:
function ExecOSCommand(
CommandStr : string;
Show : Integer;
WaitForComplete,
IsInternalCommand : Boolean
) : THandle;
var
PTemp : array [0..100] of char;
PCommand : array [0..1000] of char;
SInfo : TStartupInfo;
PInfo : TProcessInformation;
tmpExitCode : DWORD;
begin
//
// Из переменных окружения вытягиваем имя командного процессора
// и строим команду
//
if IsInternalCommand then begin
StrPCopy(PTemp, 'COMSPEC');
GetEnvironmentVariable(PTemp, PCommand, SizeOf(PCommand));
StrCat(PCommand, ' /C ');
StrPCopy(PCommand + StrLen(PCommand), CommandStr);
end
else
StrPCopy(PCommand, CommandStr);
//
// Исполняем команду
//
FillChar(SInfo, SizeOf(SInfo), 0);
SInfo.cb := SizeOf(SInfo);
SInfo.dwFlags := STARTF_USESHOWWINDOW;
SInfo.wShowWindow := Show;
if not CreateProcess(nil, PCommand, nil, nil, FALSE,
0, nil, nil, SInfo, PInfo) then
raise ECitCmdNotStarted.Create('Невозможно выполнить команду ''' +
CommandStr + '''');
try
if WaitForComplete then
begin
//
// Ожидаем завершения
//
WaitForSingleObject(PInfo.hProcess, INFINITE);
GetExitCodeProcess(PInfo.hProcess, tmpExitCode);
if tmpExitCode <> 0 then
raise ECitNonzeroExitCode.Create(' Команда ''' + CommandStr + ''''#10#13 +
' имеет ошибочный код возврата :'+ IntToStr(tmpExitCode));
end;
finally
//
// Чистим за собой
//
CloseHandle(PInfo.hThread);
CloseHandle(PInfo.hProcess);
end;
|