![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Какдождаться процесса копирования большого файла? [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]Как конкретно копируете?