![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Удаление папки [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