Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Как узнать скорость копирования файла


Автор: CHIKIST 18.6.2006, 01:24
Хочу сделать прогу, которая ищет и копирует файлы. Не знаю как определить скорость копирования и сколько осталось времени копировать!!!
 smile  


M
Girder
Поиск... http://forum.vingrad.ru/index.php?act=Search&f=2
PS: не однакратно обсуждалось!
 

Автор: Aleksiem 18.6.2006, 02:19
Засечь сколько байт копируется за единицу времени, если я всё правильно понял. Сколько осталось времени можно вычмслять двумя способами. Первый, более отзывчив по времени при перемене скорости, но могут быть резкие скачки: Вычисляешь скорость последнего переданного объём данных и рассчитываешь время передачи оставшихся данных исходя из него. Второй способ более точен но не заметно резких скачков скорости. Смотришь сколько времени передавалось уже переданное, вычисляешь среднюю скорость и вычисляешь скока будут передаваться оставшееся. 

Автор: CHIKIST 18.6.2006, 02:26
Aleksiem, хочешь сказать что в тотал коммандер так же 

Автор: F1reF0x 18.6.2006, 02:50
В TC второй способ 

Автор: CHIKIST 18.6.2006, 03:38
F1reF0x, Былобы неплохо примерчик
 smile

Добавлено @ 03:46 
Aleksiem, а если копируешь к примеру фильм 700 Mb, как ты узнаешь сколько уже скопированно, ведь сразу пишет что файл все 700 Mb, а копирует какоето время smile  

Автор: Voyager 18.6.2006, 09:48
Обычная математика и логика, учиться надо было в школе.
Объясняю на пальцах как рассчитывается оставшееся время в самом простом случае, когда скорость усредненная (можно и более точно сделать):

средняя скорость копирования = (уже скопированыый объем)/(время, которое прошло с начала копирования)

время, которое осталось = ((объем файла - уже скопированыый объем)/(уже скопированыый объем))*(время, которое прошло с начала копирования).

А вот сколько уже скопировано, это ты сам будешь считать (команды BlockWrite, FileWrite помогут вести статистику).
   

Автор: Тьма 18.6.2006, 11:49
можно потоками
Код

Procedure FileCopy(Const SourceFileName, TargetFileName: String); 
Var 
  S,T   : TFileStream; 
Begin 
 S := TFileStream.Create(sourcefilename, fmOpenRead ); 
 try 
  T := TFileStream.Create(targetfilename, fmOpenWrite or fmCreate); 
  try 
    T.CopyFrom(S, S.Size ) ; 
    FileSetDate(T.Handle, FileGetDate(S.Handle)); 
  finally 
   T.Free; 
  end; 
 finally 
  S.Free; 
 end; 
end; 

юзай TFileStream.Position, TFileStream.Size; 

Автор: CHIKIST 18.6.2006, 12:21
Тьма,  smile Спасибо 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)