Идёт загрузка страницы...

htp://aptem.net.ru





LZCopy

Вот простой пример копирования файла (сжатого или нет):


   
Var
srcHandle, destHandle: Integer;
srcBuf, destBuf: TOFStruct;


srcHandle := LZOpenFile( f_source, srcBuf,
OF_READ or OF_SHARE_DENY_NONE );
If srcHandle = -1 Then
CopyFailed
Else Begin
destHandle := LZOpenFile( f_target, destBuf,
OF_CREATE or OF_SHARE_EXCLUSIVE );
If destHandle = -1 Then
CopyFailed
Else Begin
If LZCopy( srcHandle, destHandle ) < 0 Then
CopyFailed;
LZClose( destHandle );
End; { Else }
LZClose( srcHandle );
End; { Else }

f_source и f_target - указатели на терминированные нулем строки (PChars) с именем исходного и целевого файла. CopyFailed - просто процедура для вывода сообщения об ошибке, создайте ее сами.

Если вам необходимо скопировать сразу несколько файлов, эффективнее использовать последовательность:


   
LZStart;
For i:=1 to numSourcefiles Do Begin
scrHandle := _lopen( имя исходного файла ... );
targetHandle := _lcreat( имя целевого файла... );
CopyLZFile( scrHandle, targetHandle );
_lclose( srcHandle );
_lclose( targetHandle );
End;
LZDone;
(* добавьте проверку на ошибку в каждом шаге! *)

Все имена файлов должны терминироваться нулем, не используйте паскалевские строки! Самый простой путь для добавления нуля в конец строки - добавление символа #0 и передача адреса первого символа строки, например (@str[1]).


   
Var
source: string;
sourceHandle: Word;

....
source:= 'a:\anyfile.ext';
....
source := source+#0;
sourceHandle := _lopen( @source[1], READ or OF_SHARE_DENY_NONE );

[000373]