Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Ищу пример

11K
08 декабря 2005 года
McDevil
21 / / 08.12.2005
Дайте мне пожалуйста пример хорошего копирования файлов. Я пробовал писать свое вроде получилось но с жесткого на жесткий получается медленно 8-9 мб/с
8.3K
13 декабря 2005 года
banshee
40 / / 25.11.2005
Проще использовать копирование методом файловых потоков.
Протестировал все на 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;
5
13 декабря 2005 года
hardcase
4.5K / / 09.08.2005
Цитата:
Originally posted by banshee
const
BlockSize = 65536;
// изменение этого значения на любое другое,
// отличное от указанного, приводит к
// увеличению времени копирования!!!


Говоришь 64К - оптимальный размер блока? не знал.
А с чем это связано?

303
14 декабря 2005 года
makbeth
1.0K / / 25.11.2004
Цитата:
Originally posted by McDevil
Дайте мне пожалуйста пример хорошего копирования файлов. Я пробовал писать свое вроде получилось но с жесткого на жесткий получается медленно 8-9 мб/с


А использовать стандартные FileCopy/SHFileOperation - религия не позволяет?

14K
15 декабря 2005 года
Neddy
11 / / 15.12.2005
Моно и проще, но без индикаторов :)
Копируется намальна

Var S,T : TFileStream;
Begin
S := TFileStream.Create(sourcefilename, fmOpenRead );
try
T := TFileStream.Create(targetfilename, fmOpenWrite or fmCreate);
try
T.CopyFrom(S, S.Size );
11K
17 декабря 2005 года
McDevil
21 / / 08.12.2005
Цитата:
Originally posted by makbeth
А использовать стандартные FileCopy/SHFileOperation - религия не позволяет?


Я что по реальнее ищу, а не стандартные там FileCopy/SHFileOperation !!!!
А за религию можно и в глаз:devil: :devil: :devil: :devil: :devil: :devil: :devil:

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог