Текущий архив: 2003.10.13;
Скачать: CL | DM;
ВнизОшибка Найти похожие ветки
← →
Miwa (2003-09-27 18:42) [0]Если пробую скопировать файл или группу файлов с помощью SHFileOperation или CopyFileEx то на некоторых файлах получаю сабж. Беда в том, что я не могу вычислить, почему возникает ошибка: как на маленьких, так и на больших файлах; как на локальной, так и на сетевой машинах. Правда, если уж она возникает данном файле, то постоянно. А еще иногда копируется не весь файл, а его часть (если большой), или - если файл маленький - копируется полностью (выдавая при этом ошибку), но не всегда потом открывается.
А иногда все нормально - скопировалось успешно и все ОК.
Код примерно такой:
try
with sh do begin
Wnd:=Handle;
wFunc:=FO_COPY;
pFrom:=strt;
pTo:=dest;
fFlags:=FOF_NOCONFIRMATION or FOF_RENAMEONCOLLISION;
end;
if SHFileOperation(sh)=0 then
{дальше при необходимости имя скопированного файла записывается в лог};
finally
listbox1.items.add(SysErrorMessage(GetLastError));
Refresh;
end;
← →
miwa (2003-10-01 01:36) [1]Вопросс все же остается в силе.
← →
pasha (2003-10-01 01:47) [2]Попробуй вот етот мной собственно-ручно разработаный код по копированию как папок так и отдельных файлов:
procedure CopyDirectoryTree(AHandle: THandle; const AFromDirectory, AToDirectory: String);
var
SHFileOpStruct: TSHFileOpStruct;
FromDir: PChar;
ToDir: PChar;
begin
GetMem(FromDir, Length(AFromDirectory)+2);
try
GetMem(ToDir, Length(AToDirectory)+2);
try
FillChar(FromDir^, Length(AFromDirectory)+2, 0);
FillChar(ToDir^, Length(AToDirectory)+2, 0);
StrCopy(FromDir, PChar(AFromDirectory));
StrCopy(ToDir, PChar(AToDirectory));
with SHFileOpStruct do
begin
Wnd := AHandle; // Assign the window handle
wFunc := FO_COPY; // Specify a file copy
pFrom := FromDir;
pTo := ToDir;
fFlags := FOF_NOCONFIRMATION or FOF_RENAMEONCOLLISION;
fAnyOperationsAborted := False;
hNameMappings := nil;
lpszProgressTitle := nil;
if SHFileOperation(SHFileOpStruct) <> 0 then
RaiseLastWin32Error;
end;
finally
FreeMem(ToDir, Length(AToDirectory)+2);
end;
finally
FreeMem(FromDir, Length(AFromDirectory)+2);
end;
end;
← →
miwa (2003-10-01 05:19) [3]Блин, вот дурак! Я же память не выделял! От того и произвольные ошибки при попытке чего-то оттуда получить. Странно, что вообще хоть иногда что-то работало...
> pasha © (01.10.03 01:47) [2]
Спасибо.
Страницы: 1 вся ветка
Текущий архив: 2003.10.13;
Скачать: CL | DM;
Память: 0.44 MB
Время: 0.008 c