Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.12.30;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.007 c
2-1196930572
LerMax
2007-12-06 11:42
2007.12.30
Вопрос про ссылку в классе


2-1197013873
Rimd
2007-12-07 10:51
2007.12.30
OnMouseUp


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


2-1196612331
@!!ex
2007-12-02 19:18
2007.12.30
Частый вызов SetLength(Count+10)


15-1196347111
Черный Шаман
2007-11-29 17:38
2007.12.30
Структурный вопрос - функции VS методы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский