Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.12.05;
Скачать: CL | DM;

Вниз

Архивация   Найти похожие ветки 

 
Lucifer2002   (2002-11-18 12:19) [0]

Народ, помогите ПЛЗ!
Нуно программно архивировать, сжимать файлы и также унархив. Пишется для своего инсталлятора программы. нуно сжимать около 100 Мб. В принципе знаю что нуно использовать Compress, а как?
Буду очень благодарен если кто-нить кинет мылом ссылки, исходники и прочую полезную инфу.


 
Ru ©   (2002-11-18 14:35) [1]

Создаём собственный UnRar, используя unrar.dll
Nomadic советует попробовать такой код:
--------------------------------------------------------------------------------
// Объявления

function RAROpenArchive(ArchiveData : Pointer): Integer; stdcall;
external "unrar.dll" name "RAROpenArchive";

function RARCloseArchive(hArcData : Integer): Integer; stdcall;
external "unrar.dll" name "RARCloseArchive";

function RARReadHeader(hArcData : Integer; HeaderData : Pointer): Integer; stdcall;
external "unrar.dll" name "RARReadHeader";

function RARProcessFile(hArcData : Integer; Operation : Integer; DestPath : Pointer;
DestName : Pointer): Integer; stdcall;
external "unrar.dll" name "RARProcessFile";


const

ERAR_END_ARCHIVE = 10;
ERAR_NO_MEMORY = 11;
ERAR_BAD_DATA = 12;
ERAR_BAD_ARCHIVE = 13;
ERAR_UNKNOWN_FORMAT = 14;
ERAR_EOPEN = 15;
ERAR_ECREATE = 16;
ERAR_ECLOSE = 17;
ERAR_EREAD = 18;
ERAR_EWRITE = 19;
ERAR_SMALL_BUF = 20;


RAR_OM_LIST = 0;
RAR_OM_EXTRACT = 1;
RAR_SKIP = 0;
RAR_TEST = 1;
RAR_EXTRACT = 2;
RAR_VOL_ASK = 0;
RAR_VOL_NOTIFY = 1;


type

Char260 = Array [1..260] of Char;


TRAROpenArchiveData = record
ArcName : PChar; // в C++ это будет выглядеть как: char *ArcName
OpenMode : Cardinal;
OpenResult : Cardinal;
CmtBuf : PChar;
CmtBufSize : Cardinal;
CmtSize : Cardinal;
CmtState : Cardinal;
end;


TRARHeaderData = record
ArcName : Char260;
FileName : Char260;
Flags : Cardinal;
PackSize : Cardinal;
UnpSize : Cardinal;
HostOS : Cardinal;
FileCRC : Cardinal;
FileTime : Cardinal;
UnpVer : Cardinal;
Method : Cardinal;
FileAttr : Cardinal;
CmtBuf : PChar;
CmtBufSize : Cardinal;
CmtSize : Cardinal;
CmtState : Cardinal;
end;


var

RARExtract : boolean;
RAROpenArchiveData : TRAROpenArchiveData;
RARComment : array [1..256] of Char;
RARHeaderData : TRARHeaderData;

...

procedure ExtractRARArchive;
var

sDir : string;
s : string;
sTest : string;
iTest : integer;
bTestDone : boolean;
RARhnd : Integer;
RARrc : Integer;
PDestPath : Char260;

begin

RARExtract:=TRUE;
lKBWritten:=0;
ProgressBar2.Position := 0;
ProgressBar2.Max := lTotalSize;
RARStartTime:=Time;


RAROpenArchiveData.OpenResult:=99;
RAROpenArchiveData.OpenMode := RAR_OM_EXTRACT; // открываем для распаковки
RAROpenArchiveData.ArcName:= @RARFileName;
RAROpenArchiveData.CmtBuf := @RARComment;
RAROpenArchiveData.CmtBufSize := 255;

// Открываем RAR архив и выделяем память

RARhnd := RAROpenArchive (@RAROpenArchiveData);
If RAROpenArchiveData.OpenResult <> 0 then
begin
case RAROpenArchiveData.OpenResult of
ERAR_NO_MEMORY : s:="Not enough memory to initialize data structures";
ERAR_BAD_DATA : s:="Archive header broken";
ERAR_BAD_ARCHIVE : s:="File is not valid RAR archive";
ERAR_EOPEN : s:="File open error";
end;
MessageDlg("Unable to open rar archive: " + s + "!",mtError, [mbOK], 0);
end;


RARSetProcessDataProc(RARhnd,@Form.OnRarStatus);
StrPCopy(@PDestPath, EInstallPath.Text);


repeat
RARrc := RARReadHeader (RARhnd, @RARHeaderData);// Читаем заголовок
if RARrc <> ERAR_END_ARCHIVE then
begin
ProgressBar1.Position := 0;
ProgressBar1.Max := RARHeaderData.UnpSize;
s:=RARHeaderData.FileName;
lblCurrentFile.Caption := s;
lKBytesDone := 0;
end;


if RARrc = 0 then
RARrc:=RARProcessFile (RARhnd, RAR_EXTRACT, @PDestPath, nil);
if (RARrc <> 0) and (RARrc <> ERAR_END_ARCHIVE) then
begin
MessageDlg("An Error occured during extracting of " + sTest+"!" + #13#10 +
"RARProcessFile: " + MakeItAString(RARrc),mtError, [mbOK], 0);
end;
until RARrc <> 0;

// закрываем RAR архив и освобождаем память

If RARCloseArchive(RARhnd) <> 0 then
begin
MessageDlg("Unable to close rar archive!",mtError, [mbOK], 0);
end;
end; // ExtractRARArchive


 
Lucifer2002   (2002-11-19 11:21) [2]

Не проще ли тебе было мне по сетке скинуть? Или через НЕТ быстрее? Редиска, знаешь и молчишь!!!


 
Ru ©   (2002-11-19 16:40) [3]

сам редиска не знаю в кулибе нашел за 2000 г
а по сетке (я так понял на мыло) у меня с крысой проблемы


 
Lucifer2002   (2002-11-21 14:33) [4]

Вот что значит из дома крысу тащить!
Ладно фэнкс, тока там чего-то не хватает!


 
OMatv   (2002-11-21 17:23) [5]

Используй VCLUnZip, VCLZip библиотеки.


 
Lucifer2002   (2002-11-25 12:29) [6]

Спасибо за совет. Испробую отвечу.



Страницы: 1 вся ветка

Текущий архив: 2002.12.05;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.014 c
14-14791
MsGuns
2002-11-13 20:09
2002.12.05
Покупаем комп


14-14726
Hirara
2002-11-09 17:03
2002.12.05
TChart


3-14461
Брат
2002-11-18 16:20
2002.12.05
Количество записей в таблице...


3-14425
Kurt
2002-11-15 10:36
2002.12.05
Не подскажите люди, как мне перевести ИМЕННО запись в режим редак


14-14795
Николай Быков
2002-11-14 14:07
2002.12.05
Тем, кто изучает/изучал работу с БД