Вот простой пример копирования файла (сжатого или нет):
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]