Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.12.05;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.011 c
4-14855
Ich Hasse
2002-10-23 22:12
2002.12.05
Удаление рисунка из памяти


14-14737
Kosmach
2002-11-14 10:56
2002.12.05
Dial-up server win95


7-14834
BOI
2002-10-03 13:44
2002.12.05
Как поймать окончание копирования файла


3-14476
SeRZh
2002-11-19 12:37
2002.12.05
Вопрос новичка (Продолжение)


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





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский