Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Скопрость копировании 
:(
    Опции темы
akosh12345
Дата 5.6.2010, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 1.6.2010

Репутация: нет
Всего: нет



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

Код

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 кб и будет скопрость копирование?



Это сообщение отредактировал(а) bems - 6.6.2010, 22:36
PM MAIL   Вверх
Демо
Дата 6.6.2010, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 6
Всего: 50



<Скорость копирования> = <Объём скопированной информации>/<время копирования>


--------------------
    
PM MAIL ICQ Skype   Вверх
akosh12345
Дата 6.6.2010, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 1.6.2010

Репутация: нет
Всего: нет



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

PM MAIL   Вверх
Демо
Дата 6.6.2010, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 6
Всего: 50



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


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


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

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


--------------------
    
PM MAIL ICQ Skype   Вверх
akosh12345
Дата 6.6.2010, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 1.6.2010

Репутация: нет
Всего: нет



ну да это понятно. Мне нужно время оставшееся, то есть сколько осталось скопировать а не скопировано. 
PM MAIL   Вверх
Rennigth
Дата 7.6.2010, 09:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 8
Всего: 76



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

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


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Демо
Дата 7.6.2010, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 6
Всего: 50



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


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

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

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



--------------------
    
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0547 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.