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


Автор: akosh12345 5.6.2010, 19:31
Дорогие друзья. У меня возникла проблема с копированием, вернее проблема с высчитом скопрости копирование. Копирую через поток с индикатором процесса.  Вот код

Код

procedure CopyFileThread.Execute;
const
  BufSize = 3 * 4 * 4096; 
type
  PBuffer = ^TBuffer;
  TBuffer = array[1..BufSize] of Byte;
var
    Buffer: PBuffer;
    infile, outfile: file;

begin

  if (InFileName <> OutFileName) then
  begin
    buffer := nil;
    Assign(infile, InFileName);
    Reset(infile, 1);
    try
      SizeFile := FileSize(infile);
      CopyFormFirst.ProgressBar1.Max := SizeFile;

      Assign(outfile, OutFileName);
      Rewrite(outfile, 1);
      try
        SizeDone := 0;
        New(Buffer);
        repeat
          BlockRead(infile, Buffer^, BufSize, Size);
          Inc(SizeDone, Size);
          Synchronize(SetProgeress);
          BlockWrite(outfile, Buffer^, Size)
        until Size < BufSize;
        FileSetDate(TFileRec(outfile).Handle,
        FileGetDate(TFileRec(infile).Handle));
      finally
        if Buffer <> nil then
          Dispose(Buffer);
        CloseFile(outfile)
      end;
    finally
      CloseFile(infile);
    end;
  end
  else
    raise EInOutError.Create('File cannot be copied onto itself');

  CopyFormFirst.ProgressBar1.Position := 0;

end; {FastFileCopy}

procedure CopyFileThread.SetProgeress;
begin
  CopyFormFirst.ProgressBar1.Position := SizeDone;
end;



тут я беру по 48кб и копирую частями файл. 48 кб и будет скопрость копирование?


Автор: Демо 6.6.2010, 15:00
<Скорость копирования> = <Объём скопированной информации>/<время копирования>

Автор: akosh12345 6.6.2010, 18:04
из этого следует задать вопрос : как узнать время копирование? поделить объем данных , в моем случаи, на 48?

Автор: Демо 6.6.2010, 21:31
Цитата(akosh12345 @  6.6.2010,  18:04 Найти цитируемый пост)
из этого следует задать вопрос : как узнать время копирование? поделить объем данных , в моем случаи, на 48?


Время копирования = <Текущее время>-<Время начала копирования>
(Используем GetTickCount).


<Объём скопированных данных>=<Суммируем длину всех кусков, которые уже скопировали>

48 здесь совершенно ни при чём.

Автор: akosh12345 6.6.2010, 23:14
ну да это понятно. Мне нужно время оставшееся, то есть сколько осталось скопировать а не скопировано. 

Автор: Rennigth 7.6.2010, 09:41
Цитата(akosh12345 @  6.6.2010,  23:14 Найти цитируемый пост)
Мне нужно время оставшееся

Это не возможно )))
{Нет ничего невозможного (с)}

Автор: Демо 7.6.2010, 11:55
Цитата(akosh12345 @  6.6.2010,  23:14 Найти цитируемый пост)
Мне нужно время оставшееся, то есть сколько осталось скопировать а не скопировано. 


На основании <Объём частично скопированной информации(o)>,<время копирования(t)>,<общего объёма(O)> составляем уравнение:

O = V*T
V=o/t
где V - скорость копирования, T - общее время копирования

T = O/V = O/(o/t)

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