Копирование файлов I
У меня есть проблема с копированием файлов. Delphi не хочет компилировать команду LZCopy.
Данный способ очень медленный:
pbBuf := PChar( LocalAlloc(LMEM_FIXED, 1) ); FileSeek(source,0,0); FileSeek(dest,0,0); repeat cbRead := Fileread(source, pbBuf, 1);
FileWrite(dest, pbBuf, cbRead);
until (cbRead = 0);
|
Решение 1
{ Не забудьте добавить LZExpand в список используемых модулей (USES LZExpand;) } function CopyFile(SrcF,DestF : string) : boolean;L var SFile,
DFile : integer;
Res : longint;
Msg : string;
begin SFile := FileOpen(SrcF,0); { Открытие ReadOnly = 0, Write=1, Readwrite=2}
DFile := FileCreate(DestF);
Res := LZCopy(SFile,DFile);
FileClose(SFile);
FileClose(DFile);
if Res < 0 then
begin
Msg := 'Неизвестная ошибка';
case Res of
LZERROR_BADINHANDLE : Msg := 'Неверный дескриптор исходного файла';
LZERROR_BADOUTHANDLE : Msg := 'Неверный дескриптор файла-приемника';
LZERROR_BADVALUE : Msg := 'Входной параметр вышел за границы диапазона';
LZERROR_GLOBALLOC : Msg := 'Недостаточно памяти для требуемого буфера';
LZERROR_GLOBLOCK : Msg := 'Неверный дескриптор структуры внутренних данных';
LZERROR_READ : Msg := 'Неверный формат исходного файла';
LZERROR_UNKNOWNALG : Msg := 'Исходный файл был сжат неизвестным алгоритмом сжатия';
LZERROR_WRITE : Msg := 'Недостаточно места для выходного файла';
end;
MessageDlg(Msg,mtERROR,[mbOK],0);
result := FALSE
end else
result := TRUE;
end;
|
Решение 2
Конечно это будет медленным! Ты же читаешь по одному символу за раз... Попробуй распределить 8192 байт памяти и читать каждый проход по 8192 байт. Это должно немного ускорить процесс...
Решение 3
Самый простой способ копирования файлов:
VAR sI,dI:Longint; sD,sS:TFilename; USES LZExpand; ............ sI := FileOpen(sS,fmShareDenyWrite); dI := FileCreate(sD); { Копирование файла } CopyLZFile(sI,dI); { Закрытие файла } FileClose(sI); FileClose(dI); ............ |
[000088]