Форум: "Начинающим";
Текущий архив: 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;
Простите, не совсем понял.. Может так надо:
beginif _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