function MyCopyFile(FromFile, ToFile: TFileName): Boolean;
var
FromStream, ToStream: TFileStream;
begin
Result := True;
if not FileExists(FromFile) then begin
Result := False;
Exit;
end;
FromStream := TFileStream.Create(FromFile, fmRead);
try
ToStream := TFileStream.Create(ToFile, fmCreate);
try
//ProgressBar1.Max := FromStream.Size;
while ToStream.Size < FromStream.Size do begin
ToStream.CopyFrom(FromStream, 1);
//сдесь чё-нить с прогрессом делаем (увеличиваем)
//Application.ProcessMessages;
end;
finally
ToStream.Free;
end;
finally
FromStream.Free;
end;
end;
Progress Bar и копирование файлов
Когда копируется что-то большое, то может показаться, что комп повис..
На самом деле он копирует. А вот если бы был Progress Bar, который показывает, сколько осталось/скопировалось, было бы веселее.. Только как это сделать..? :)
var k: integer; //кол-во файлов для копирования
begin
progressbar1.Min:=0;
progressbar1.max:=k;
progressbar1.Stepby(1); // шаг прогресс бара
end;
var k: integer; //кол-во файлов для копирования
begin
progressbar1.Min:=0;
progressbar1.max:=k;
progressbar1.Stepby(1); // шаг прогресс бара
Application.ProcessMessages;
end;
только ЭТО на случай копирования нескольких файлов...... если тебе нужен прогресс на каждый файл в отдельности - реализация завит от кода, которым ты копируешь файлы.... кидай процедуру копирования - мы найдём решение.... наверно.. ))))
В RX была похожая функция, в FileUtil.
Копирую я так: CopyFile(adress, newadress, True);
У меня кстати как-то несколько раз глюки ужасные были с CopyFile() - фильмы копировались с скоростью 700 метров в секунду, но самое ужасное это то что эти фильмы (некоторые, вернее почти все) после этого непоказывали, и после такого я так и немогу понять кто гнал - CopyFile(), винда или делфя криво встала, или еще что-то...
ребята попробуйте написать свою прощедуру копирования файлов.... используем TFileStream (и таймер если хотите).... )))) тогда можно будет и прогресс бар на каждый файл добавить....
Код:
писал сразу сюда... поэтому могут быть ошибки....
зы: для большей эффективности данного метода и увеличения скорости копирования предлягаю при копировании использовать вместо 1 байта... скажем 1 Кб...
Используй CopyFileEx вместо CopyFile - у нее можно задать "progress routine". Рекомендованный мной RX FileUtil является всего лишь обвязкой вокруг этой процедуры. Можно не использовать его напрямую, а только посмотреть, как реализовано там. Пример очень качественный.
Вообще, предпочительнее всегда использовать встроенные в систему процедуры копирования. Например, в справке Far написано, установка флага "Использовать встроенную процедуру копирования" предпочтительна для NTFS, т. к. более эффективно распределяет дисковое пространство, препятствуя неконтролируемой фрагментации. Far ничего нового не изобретает - SDK для всех один. Следовательно, используется все та же CopyFileEx.
А вообще вместо прогресс бара можно TAnimation попользовать. Будет копирование аля-виновс.
зы: еxe-шник нужно поместить в каталог с туевой хучей файлов (пока только mp3, wav, avi и mpg). А там он сам все сделает :)
Все глюки\предложения и т.п. присылайте мну
Если только целью не стоит научиться программировать, на практике не проще ли воспользоваться, например, Ctrl + <+ на дополнительной цифровой клавиатуре> в Far? Отметит все файлы, имеющие такое же расширение, как и у выделенного курсором.
Руки чешутся чтоб написать че-нить - идей нет. Вот появилась идейка. Почему бы и не написать?