|
#1
|
||||
|
||||
WinRAR & delphi
Как программно распоковать файл RAR и открыть его в программе??
Например: Архив TEST.rar в нем файл file.txt его надо распокавать и открыть в мемо, как это сделать? [ iNewStar.Ru ] - Продам! Вопросы в ПМ |
#2
|
|||
|
|||
1 вариант. Идешь на torry.ru, качаешь любой понравившийся компонент распаковки RAR'а, ставишь его. При работе распаковываешь во временную папочку и оттуда открываешь.
2 вариант. Пользуемся консольным варианторм RAR'а. Через CreateProcess запускаем распаковку файла, дожидаемся окончания процесса и читаем файл. |
#3
|
||||
|
||||
[ iNewStar.Ru ] - Продам! Вопросы в ПМ |
#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; |