Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Удаление папки [D6, Win95/98, Win2k, WinXP]


_Devil_ ©   (2006-03-08 02:25:00) 

Подскажите плиз, как удалить папку функциями АПИ?


_Devil_   (2006-03-11 21:15:00) [1]

Че-то не работает RemoveDir...


var
D:String[255];
begin
D:='c:\temp\2006-02-08';
...
//удаляю файлы из папки D
...
//здесь папка уже пустая
RemoveDir(D);
end;


_Devil_   (2006-03-10 17:44:00) [2]

А если использовать 2-й способ, то папка должна быть пустой? или не обязательно? И есть ли разница в скорости выполнения между 1-м и 2-м способом?
Если я использую для поиска файлов функции FindFirstFile и FindNextFile, то нужно ли как-то уничтожать после использования структуру TWin32FindData?


_Devil_   (2006-03-10 14:08:00) [3]

Спасибо БОЛЬШОЕ! Будем пробовать! =)


AlexeyT   (2006-03-09 08:32:00) [4]


> Надо путь писать : c:\\test\dfg
> Чтобы вначале "\\" было...иначе не будет удалять диры из
> корня

Что за бред? Слеш должен быть одинарным. А строку надо завершать _двойным_ нулем: sh.pFrom:= PChar('c:\test'+#0).


Dmitrij_K   (2006-03-08 19:11:00) [5]

Удаление каталога с подкаталогами

Способ 1: проход по дереву каталогов

Function MyRemoveDir(sDir : String) : Boolean;  
var    
iIndex : Integer;    
SearchRec : TSearchRec;    
sFileName : String;      
begin  
Result := False;    
sDir := sDir + '\*.*';    
iIndex := FindFirst(sDir, faAnyFile, SearchRec);    
while iIndex = 0 do    
begin    
sFileName := ExtractFileDir(sDir)+'\'+SearchRec.Name;    
if SearchRec.Attr = faDirectory then    
begin    
if (SearchRec.Name <> '' ) and (SearchRec.Name <> '.') and (SearchRec.Name <> '..') then MyRemoveDir(sFileName);    
end    
else    
begin    
if SearchRec.Attr <> faArchive then FileSetAttr(sFileName, faArchive);  
if NOT DeleteFile(sFileName) then ShowMessage('Could NOT delete ' + sFileName);    
end;    
iIndex := FindNext(SearchRec);    
end;    
FindClose(SearchRec);  
RemoveDir(ExtractFileDir(sDir));  
Result := True;    
end;


Способ 2: Использование ShellApi

uses ShellApi;
...
var sh : SHFILEOPSTRUCT;
begin
...  
sh.Wnd := Application.Handle;  
sh.wFunc := FO_DELETE;  
sh.pFrom := 'c:\\test\0';  
sh.pTo := nil;  
sh.fFlags := FOF_NOCONFIRMATION or FOF_SILENT;  
sh.hNameMappings := nil;  
sh.lpszProgressTitle := nil;  
SHFileOperation (sh);  
...  
 

Надо путь писать : c:\\test\dfg
Чтобы вначале "\\"было...иначе не будет удалять диры из корня

-----------------------------------------
Delphi Russian Knowledge Base www.drkb.ru


Жуков Олег   (2006-03-08 02:38:00) [6]

Windows.RemoveDirectory, или ShellAPI.SHFileOperation


Наверх

Титульная страница Поиск, карта сайта Написать письмо