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

htp://aptem.net.ru





Копирование файлов 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]