Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.12.30;
Скачать: CL | DM;

Вниз

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

 
deras ©   (2007-12-06 12:38) [0]

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

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


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

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


 
deras ©   (2007-12-06 12:47) [2]


> Юрий Зотов ©   (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;


 
Rouse_ ©   (2007-12-06 13:06) [3]

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


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

fFlags := FOF_NOCONFIRMATION or FOF_SIMPLEPROGRESS ?


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

цикл?


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


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


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


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


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


 
{RASkov} ©   (2007-12-06 13:30) [7]

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

Если

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

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

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


 
sniknik ©   (2007-12-06 13:36) [8]

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


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


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

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


 
Amoeba ©   (2007-12-06 14:51) [10]


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

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


 
deras ©   (2007-12-06 15:02) [11]


> 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;


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

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


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


 
Dib@zol ©   (2007-12-06 15:06) [13]

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


 
sniknik ©   (2007-12-06 15:44) [14]

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

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


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


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


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

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

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


 
sniknik ©   (2007-12-06 15:57) [16]

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

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


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


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

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

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



Страницы: 1 вся ветка

Текущий архив: 2007.12.30;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.017 c
3-1188048232
ChaoX
2007-08-25 17:23
2007.12.30
Уникальный индекс для строки


2-1196675502
Alexandr Malygin
2007-12-03 12:51
2007.12.30
excel


6-1176305583
ALnEtNoInA
2007-04-11 19:33
2007.12.30
Написать простейший прокси-сервер (https) средствами Indy


15-1196156980
All More system
2007-11-27 12:49
2007.12.30
Тестирование работоспособности программ


2-1196782477
Alexey
2007-12-04 18:34
2007.12.30
Как правильно масштабировать форму