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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с CopyFileEx 
:(
    Опции темы
Bibus
Дата 7.12.2004, 08:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Подскажите, как при копировании файла большого объема прервать этот процесс?
В функции CopyFileEx, есть такой параметр как pbCancel, а вот как его в нужный момент в true поставить? Вроде ничего сложного, а нифига не получается smile

И еще вопрос по этой функе: как использовать lpProgressRoutine?
Если можно, примерчик пожалуйста маханький smile

PM MAIL   Вверх
Girder
Дата 7.12.2004, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


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

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



К примеру вот так... smile
Код
unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, Gauges;

type
 TForm1 = class(TForm)
   Button1: TButton;
   Gauge1: TGauge; //Ищи на закладке Samples
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;
 Cancel:Bool;

implementation

{$R *.dfm}

function CopyProgressRoutine(TotalFileSize:_LARGE_INTEGER;TotalBytesTransferred:_LARGE_INTEGER;
                            StreamSize:_LARGE_INTEGER;StreamBytesTransferred:_LARGE_INTEGER;
                            StreamNumber:DWord;CallbackReason:DWord;hSourceFile:DWord;
                            hDestinationFile:DWord;Data:Pointer):DWord; stdcall;
var Progress:integer;
begin
Progress:=(TotalBytesTransferred.QuadPart*100 div TotalFileSize.QuadPart) mod $FFFFFFFF;
Form1.Gauge1.Progress:=Progress;
Result:=PROGRESS_CONTINUE;
//Примеры:
//if Progress>20 then Result:=PROGRESS_CANCEL; //1 пример остановки
//if Progress>50 then Cancel:=true; //2 пример
end;

procedure TForm1.Button1Click(Sender: TObject);
var ExistingFileName,NewFileName:String;
begin
Cancel:=false;
ExistingFileName:='e:\vvv.txt'; //Источник
NewFileName:='g:\vvv.mpg'; //Новое место и имя
if DWord(CopyFileEx(PChar(ExistingFileName),PChar(NewFileName),@CopyProgressRoutine,nil,@Cancel,COPY_FILE_FAIL_IF_EXISTS))<>0 then
 Caption:='Ok!' else Caption:='Error';
end;

end.


Удачи.


--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
Bibus
Дата 8.12.2004, 08:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Все вроде работает, НО в некоторых случаях вылетает ошибка:

Цитата
Project Wild.exe raised exception class EDivByZero with message 'Division by zero'. Process stoped.


С чем это может быть связано?

Может здесь:
Цитата
Progress:=(TotalBytesTransferred.QuadPart*100 div TotalFileSize.QuadPart) mod $FFFFFFFF;


Объясните плиз, зачем нужна эта опреация: mod $FFFFFFFF??
Спасибо.
PM MAIL   Вверх
Bibus
Дата 8.12.2004, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Сам разобрался smile просто попадаются файлики размером=0...
а вот зачем mod $FFFFFFFF не понятно, пока...вроде и без этого работает smile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.1252 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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