Советы по Delphi

         

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]



Содержание раздела