Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Какдождаться процесса копирования большого файла? [D7, XP]


deras ©   (2007-12-06 12:38:00) 

Привет, Мастера!
Копирую большой файл (с помощью API). После хочу проверить, есть ли этот файл в том месте, куда копировал (if FileExists...). Но "проверка" срабатывает до того, как файл скопировался.

Вопрос. Как дождаться процесса копирования большого файла?


Amoeba   (2007-12-07 00:46:00) [1]


> deras ©   (06.12.07 15:02) [11]
>
>
> > Amoeba ©   (06.12.07 14:51) [10]
>
>
> Как раз только эту статью я и читал. Вот строка из нее:
>
> "FOF_SIMPLEPROGRESS Показывать диалог с индикатором прогресса,
>  но не показывать имен файлов."
> Или я не правильно понял?
>

Если читать внимательнее, то увидишь это:

lpszProgressTitle
Указатель на строку, используемую как заголовок для диалогового окна прогресса. Этот элемент используется только, если установлен флаг FOF_SIMPLEPROGRESS


sniknik   (2007-12-06 15:57:00) [2]

> т.е., надо так?
наверно так... спроси у clickmaker-а. еще лучше прочти справку...

> А уже потом, например вот так?
>> Dib@zol ©   (06.12.07 15:06) [13]
лучше см. мой пример с исключением, он не даст "сглотнуть" ошибку, которую ты флагом и внутри исключил и сам получается не отрабатываешь.


deras   (2007-12-06 15:48:00) [3]


> значит его надо установить.


т.е., надо так?
fFlags := FOF_NOCONFIRMATION + FOF_NOERRORUI ;

А уже потом, например вот так?

> Dib@zol ©   (06.12.07 15:06) [13]


sniknik   (2007-12-06 15:44:00) [4]

> если нет флага FOF_NOERRORUI, то SHFileOperation сама сигнализирует об ошибке и вернет 0
значит его надо установить.

иначе все дальнейшие проверки смысла не имеют... если даже при ошибке, и не сохраненном файле возможен "Ok-ный" возврат.
а как проверку делать, условием (как после предлагали вариации) или исключением, неважно.


Dib@zol   (2007-12-06 15:06:00) [5]

или тогда уж
if not boolean(_CopyFiles(Handle, [name.ext], 'c:\dir'...)) then...


deras   (2007-12-06 15:04:00) [6]

сорри... вот так я имел ввиду


> if_CopyFiles(Handle, [name.ext], 'c:\dir'...)<>0
>   then
> ShowMessage('Файл скопирован полностью');


deras   (2007-12-06 15:02:00) [7]


> Amoeba ©   (06.12.07 14:51) [10]


Как раз только эту статью я и читал. Вот строка из нее:

"FOF_SIMPLEPROGRESS Показывать диалог с индикатором прогресса, но не показывать имен файлов."
Или я не правильно понял?


> то получается, что так:
> begin  _CopyFiles(Handle, [name.ext],
>  'c:\dir'...);  ShowMessage('Файл скопирован полностью');
> end;

Простите, не совсем понял.. Может так надо:
begin  
if_CopyFiles(Handle, [name.ext], 'c:\dir'...);   then
ShowMessage('Файл скопирован полностью');
end;


Amoeba   (2007-12-06 14:51:00) [8]


> deras ©   (06.12.07 13:24) [6]
>
>
> > Amoeba ©   (06.12.07 13:14) [4]
>
>
> А мне надо видеть имена копируемых файлов
>

Читай эту статью:
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=91


clickmaker   (2007-12-06 14:05:00) [9]


> [8] sniknik ©   (06.12.07 13:36)

если нет флага FOF_NOERRORUI, то SHFileOperation сама сигнализирует об ошибке и вернет 0


sniknik   (2007-12-06 13:36:00) [10]

> то получается, что так:
не, скорее так
begin
 Win32Check(_CopyFiles(Handle, [name.ext], 'c:\dir'...));
ShowMessage('Файл скопирован полностью');
end;


{RASkov}   (2007-12-06 13:30:00) [11]

> [6] deras ©   (06.12.07 13:24)
> А как проверить и передать наружу с функции?

Если

> то вот здесь: SrcBuf := nil; файл уже будет скопирован целиком

то получается, что так:
begin
 _CopyFiles(Handle, [name.ext], 'c:\dir'...);
 ShowMessage('Файл скопирован полностью');
end;

или я не правильно понял????


deras   (2007-12-06 13:24:00) [12]


> Rouse_ ©   (06.12.07 13:06) [3]


А как проверить и передать наружу с функции?


> Amoeba ©   (06.12.07 13:14) [4]


А мне надо видеть имена копируемых файлов


MOO   (2007-12-06 13:20:00) [13]

цикл?


Amoeba   (2007-12-06 13:14:00) [14]

fFlags := FOF_NOCONFIRMATION or FOF_SIMPLEPROGRESS ?


Rouse_   (2007-12-06 13:06:00) [15]

SHFileOperation синхронная, если не вызываешь в дополнительном потоке, то вот здесь: SrcBuf := nil; файл уже будет скопирован целиком


deras   (2007-12-06 12:47:00) [16]


> Юрий Зотов ©   (06.12.07 12:41) [1]


function _CopyFiles( Handle : Hwnd; Src : array of string; Dest : string; Move : Boolean; AutoRename : Boolean ) : Integer;
var
 SHFileOpStruct : TSHFileOpStruct;
 SrcBuf : TBuffer;
begin
 CreateBuffer( Src, SrcBuf );
 with SHFileOpStruct do
   begin
     Wnd := Handle;
     wFunc := FO_COPY;
     if Move then wFunc := FO_MOVE;
     pFrom := Pointer( SrcBuf );
     pTo := PChar( Dest );
     fFlags := FOF_NOCONFIRMATION;
     if AutoRename then fFlags := FOF_RENAMEONCOLLISION;
     fAnyOperationsAborted := False;
     hNameMappings := nil;
     lpszProgressTitle := nil;
   end;
 Result := SHFileOperation( SHFileOpStruct );
 SrcBuf := nil;
end;


Юрий Зотов   (2007-12-06 12:41:00) [17]

Как конкретно копируете?


Наверх

Титульная страница Поиск, карта сайта Написать письмо