This version of the page http://igp.org.ua/articles/a125/ (0.0.0.0) stored by archive.org.ua. It represents a snapshot of the page as of 2007-02-18. The original page over time could change.
Копирование файлов :: Статьи по Delphi - Iguana Software - IGP.ORG.UA
Поиск по базе статей :
18.08.2006
Изменено разрешение сайта

Изменено минимальное разрешение сайта на 1024x768
Подробнее...



02.08.2006
Выгружена игра "Digger Remastered"

Вспоминаем старый добрый DOS и времена 80-х! ;)
Подробнее...



 
Рекомендуем книгу!
Delphi. Учимся правильно программировать

Данная книга - учебное пособие по программированию в среде Delphi. Вначале книги в сжатом виде, но достаточно полно изложены синтаксис классического языка Pascal и основы объектно-ориентированного программирования на базе синтаксиса Object Pascal. Основна...








Копирование файлов :: Статьи по Delphi
Nomadic советует:

Можно так:

 


    procedure CopyFile(const FileName, DestName: TFileName);
var
CopyBuffer: Pointer; { buffer for copying }
TimeStamp, BytesCopied: Longint;
Source, Dest: Integer; { handles }
Destination: TFileName; { holder for expanded destination name }
const
ChunkSize: Longint = 8192; { copy in 8K chunks }
begin
Destination := ExpandFileName(DestName); { expand the destination path }
if HasAttr(Destination, faDirectory) then { if destination is a directory... }
Destination := Destination + '\' + ExtractFileName(FileName); { ...clone file name }
TimeStamp := FileAge(FileName); { get source's time stamp }
GetMem(CopyBuffer, ChunkSize); { allocate the buffer }
try
Source := FileOpen(FileName, fmShareDenyWrite); { open source file }
if Source < 0 then raise EFOpenError.Create(FmtLoadStr(SFOpenError, [FileName]));
try
Dest := FileCreate(Destination); { create output file; overwrite existing }
if Dest < 0 then raise EFCreateError.Create(FmtLoadStr(SFCreateError, [Destination]));
try
repeat
BytesCopied := FileRead(Source, CopyBuffer^, ChunkSize); { read chunk }
if BytesCopied > 0 then { if we read anything... }
FileWrite(Dest, CopyBuffer^, BytesCopied); { ...write chunk }
until BytesCopied < ChunkSize; { until we run out of chunks }
finally
FileClose(Dest); { close the destination file }

{        SetFileTimeStamp(Destination, TimeStamp);} { clone source's time stamp }{!!!}
 
end;
finally
FileClose(Source); { close the source file }
end;
finally
FreeMem(CopyBuffer, ChunkSize); { free the buffer }
end;
FileSetDate(Dest,FileGetDate(Source));
end;

Хм. IMHO кpутовато будет такие функции писать, когда в большинстве случаев достаточно что-нубудь типа нижепpиводимого, пpичем оно даже гибче, так как позволяет скопиpовать как весь файл пpи From и Count = 0, так и пpоизвольный его кусок.

 


    function CopyFile( InFile,OutFile: String; From,Count: Longint ): Longint;
var
InFS,OutFS: TFileStream;
begin
InFS  := TFileStream.Create( InFile,  fmOpenRead );
OutFS := TFileStream.Create( OutFile, fmCreate   );
InFS.Seek( From, soFromBeginning );
Result := OutFS.CopyFrom( InFS, Count );
InFS.Free;
OutFS.Free;
end;

try..except pасставляются по вкусу, а навоpоты вpоде установки атpибутов,даты и вpемени файла и т.п. для ясности удалены, да и не нужны они в основном никогда.

Конечно, под Win32 имеет смысл использовать функции CopyFile, SHFileOperation

Copyright 2001-2007 © "Iguana Software".
О компании | Продукты | Усуги | Заявление о приватности | Правила использования | Обратная связь
IGP Delphi Forum | Библиотека VCL | Увлекательные знакомства, Украина