![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Переполнение буфера? [D7, XP]
deras © (2008-04-03 12:49:00)Удаляю файлы, пути к которым прописаны в текстовом файле. Удаление идет в цикле "пока не закончиться список". Удяляются файли с помощью ф-ций (где-то нашел)
procedure CreateBuffer( Names : array of string; var P : TBuffer );
var I, J, L : Integer;
begin
for I := Low( Names ) to High( Names ) do
begin
L := Length( P );
SetLength( P, L + Length( Names[ I ] ) + 1 );
for J := 0 to Length( Names[ I ] ) - 1 do
P[ L + J ] := Names[ I, J + 1 ];
P[ L + J ] := #0;
end;
SetLength( P, Length( P ) + 1 );
P[ Length( P ) ] := #0;
end;
function TFMain._DeleteFiles( Handle : HWnd; Names : array of string; ToRecycle : Boolean ) : Integer;
var
SHFileOpStruct : TSHFileOpStruct;
Src : TBuffer;
begin
CreateBuffer( Names, Src );
with SHFileOpStruct do
begin
Wnd := Handle;
wFunc := FO_DELETE;
pFrom := Pointer( Src );
pTo := nil;
fFlags := FOF_NOCONFIRMATION; //на все запросы отвечает 'yes to all'
if ToRecycle then fFlags := FOF_ALLOWUNDO;
fAnyOperationsAborted := False;
hNameMappings := nil;
lpszProgressTitle := nil;
end;
Result := SHFileOperation( SHFileOpStruct );
Src := nil;
end;
Если количество удаляемых файлов невелико, то все ок. Но когда много - тогда выдает ошибку "Invalid pointer operation". Насколько я понимаю, происходит переполнение буфера из-за того, что начинается процес удаления многих файлов одновременно.
Как можно исправить ситуацию?
Johnmen (2008-04-03 14:04:00) [1]
> был готовый код. Надо внести изменения.
Т.е. чтобы за тебя ещё и изменения внесли в тупо стыренный код?
Игорь Шевченко (2008-04-03 13:42:00) [2]Что такое TBuffer ?
deras (2008-04-03 13:02:00) [3]был готовый код. Надо внести изменения.
Попробую с DeleteFile...
Спасибо
clickmaker (2008-04-03 12:59:00) [4]а что такое TBuffer?
Kolan (2008-04-03 12:54:00) [5]Обычный DeleteFile+TStringList чем не устроил?
Reindeer Moss Eater (2008-04-03 12:53:00) [6]тогда выдает ошибку "Invalid pointer operation".
И где в нем хоть намек на "буфер" или "переполнение" ?
Мы говорим "ленин" - подразумеваем "партия" ?