Советы по Delphi

       

LZCopy


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

VarsrcHandle, destHandle: Integer;srcBuf, destBuf: TOFStruct;

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

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

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



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

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

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

[000373]



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