Ищу пример
Дайте мне пожалуйста пример хорошего копирования файлов. Я пробовал писать свое вроде получилось но с жесткого на жесткий получается медленно 8-9 мб/с
Протестировал все на D6. На форме две кнопки и ProgressBar.
Button1 - копирование; Button2 - отмена.
var CancelOperation:Boolean; // Глобальное объявление
..........................
procedure TForm1.Button1Click(Sender: TObject);
const
BlockSize = 65536;
// изменение этого значения на любое другое,
// отличное от указанного, приводит к
// увеличению времени копирования!!!
var
ElapsedSize, CopySize: Integer;
SourceStream, TargetStream: TFileStream;
Source, Target: String;
begin
CancelOperation:=False;
Source:='c:\copy\testfile.dat';
Target:='c:\testfile.dat';
SourceStream:=TFileStream.Create(Source,fmOpenRead);
TargetStream:=TFileStream.Create(Target,fmCreate);
ElapsedSize:=SourceStream.Size - SourceStream.Position;
ProgressBar1.Max:=SourceStream.Size;
while ElapsedSize > 0 do
begin
if ElapsedSize < BlockSize
then CopySize:=ElapsedSize
else
CopySize:=BlockSize;
TargetStream.CopyFrom(SourceStream,CopySize);
ElapsedSize:=SourceStream.Size - SourceStream.Position;
ProgressBar1.Position:=SourceStream.Position;
// модификация индикатора процесса
Application.ProcessMESSAGES;
// чтобы окно и все, что на нем находится реагировало
// на изменения (нажатие кнопки, перерисовка в случае
// перекрытия ...)
if CancelOperation then Break;
// если пользователь нажал кнопку отмены копирования
end; // while
FileSetDate(TargetStream.Handle, FileGetDate(SourceStream.Handle));
TargetStream.Free;
SourceStream.Free;
if CancelOperation then DeleteFile(Target);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
CancelOperation:=True;
Close;
end;
Цитата:
Originally posted by banshee
const
BlockSize = 65536;
// изменение этого значения на любое другое,
// отличное от указанного, приводит к
// увеличению времени копирования!!!
const
BlockSize = 65536;
// изменение этого значения на любое другое,
// отличное от указанного, приводит к
// увеличению времени копирования!!!
Говоришь 64К - оптимальный размер блока? не знал.
А с чем это связано?
Цитата:
Originally posted by McDevil
Дайте мне пожалуйста пример хорошего копирования файлов. Я пробовал писать свое вроде получилось но с жесткого на жесткий получается медленно 8-9 мб/с
Дайте мне пожалуйста пример хорошего копирования файлов. Я пробовал писать свое вроде получилось но с жесткого на жесткий получается медленно 8-9 мб/с
А использовать стандартные FileCopy/SHFileOperation - религия не позволяет?
Копируется намальна
Var S,T : TFileStream;
Begin
S := TFileStream.Create(sourcefilename, fmOpenRead );
try
T := TFileStream.Create(targetfilename, fmOpenWrite or fmCreate);
try
T.CopyFrom(S, S.Size );
Цитата:
Originally posted by makbeth
А использовать стандартные FileCopy/SHFileOperation - религия не позволяет?
А использовать стандартные FileCopy/SHFileOperation - религия не позволяет?
Я что по реальнее ищу, а не стандартные там FileCopy/SHFileOperation !!!!
А за религию можно и в глаз:devil: :devil: :devil: :devil: :devil: :devil: :devil: