Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.47 MB
Время: 0.015 c
1-40475
Dysan
2003-10-02 14:37
2003.10.13
CreateOleObject( Excel.Application );


1-40452
Zheks
2003-10-02 17:44
2003.10.13
Проиграть *.wav файл без помощи внешних программ


3-40282
ViKS
2003-09-22 13:33
2003.10.13
Перенос базы данных на другой компьютер


1-40351
Maximus2002
2003-10-01 20:26
2003.10.13
Форма лога в 1С


1-40488
plyaznik
2003-10-02 12:38
2003.10.13
помогайте, мастера