![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Удаление всех файлов в папке [D7, WinXP]
Sergg © (2006-11-29 11:45:00)Подскажите пожалуйста как грамотно грохнуть все файлы в папке?
пробовал FindFirst - FindNext но что-то не очень:(
Игорь Шевченко (2006-11-29 17:50:00) [1]Можно я тоже свои 5 копеек ? Любителям "чиста на API"
procedure Utils_DeleteDirectoryTree (Directory: PChar);
var
FindHandle: THandle;
FindData: WIN32_FIND_DATAA;
begin
if not Assigned(Directory) or (Directory[0] = #0) or
not SetCurrentDirectoryA (Directory) then
Exit;
FindHandle := FindFirstFileA ('*', FindData);
if FindHandle <> INVALID_HANDLE_VALUE then
repeat
if (FindData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY)
= 0 then begin
SetFileAttributesA (FindData.cFileName, FILE_ATTRIBUTE_NORMAL);
DeleteFileA (FindData.cFileName);
end else if (lstrcmpA (FindData.cFileName, '.') <> 0) and
(lstrcmpA (FindData.cFileName, '..') <> 0) then
Utils_DeleteDirectoryTree (FindData.cFileName);
until not FindNextFileA (FindHandle, FindData);
Windows.FindClose (FindHandle);
SetCurrentDirectoryA ('..');
SetFileAttributesA (Directory, FILE_ATTRIBUTE_NORMAL);
RemoveDirectoryA (Directory);
end;
alex_*** (2006-11-29 16:49:00) [2]+ получаем охренительно настраиваемое удаление
alex_*** (2006-11-29 16:49:00) [3]пишем батник: del *.* и напускаем на него ShellExecute. все вопросы к удалению к командному интерпретатору
Anatoly Podgoretsky (2006-11-29 16:46:00) [4]Естественно это ошибка, сравнение должно быть точное, а не по первому символу.
clickmaker (2006-11-29 16:44:00) [5]
> if (FileInfo.Name[1] <> '.')
а если у меня какой-нить .htaccess?
Anatoly Podgoretsky (2006-11-29 16:32:00) [6]> clickmaker (29.11.2006 15:21:17) [17]
Не конфискованный, а патентованый
Дмитрий Белькевич (2006-11-29 16:21:00) [7]Вот что пользую, никогда не отказывало, хотя я особенно много им и не стирал, насколько помню, большей частью из Rx'ов:
function ClearDir(const Path: string; Delete: Boolean): Boolean;
const
FileNotFound = 18;
var
FileInfo: TSearchRec;
DosCode: Integer;
begin
Result := DirectoryExists(Path);
if not Result then
begin
Exit;
end;
DosCode := FindFirst(NormalDir(Path) + '*.*', faAnyFile, FileInfo);
try
while DosCode = 0 do
begin
if (FileInfo.Name[1] <> '.') and (FileInfo.Attr <> faVolumeID) then
begin
if (FileInfo.Attr and faDirectory = faDirectory) then
begin
Result := ClearDir(NormalDir(Path) + FileInfo.Name, Delete) and Result;
end
else
begin
if (FileInfo.Attr and faVolumeID <> faVolumeID) then
begin
if (FileInfo.Attr and faReadOnly = faReadOnly) then
begin
FileSetAttr(NormalDir(Path) + FileInfo.Name, faArchive);
end;
Result := DeleteFile(NormalDir(Path) + FileInfo.Name) and Result;
end;
end;
end;
DosCode := FindNext(FileInfo);
end;
finally
FindClose(FileInfo);
end;
if Delete and Result and (DosCode = FileNotFound) and not ((Length(Path) = 2) and (Path[2] = ':')) then
begin
try
RmDir(Path);
except
end;
Result := (IOResult = 0) and Result;
end;
end;
clickmaker (2006-11-29 15:21:00) [8]
> [16] Sergg (29.11.06 15:17)
> Ладно, ладно, это я так;)))
c Анатолием бесполезно соревноваться. У него конфискованный спам-робот заготовлен на этот случай
Sergg (2006-11-29 15:17:00) [9]Ладно, ладно, это я так;)))
Anatoly Podgoretsky (2006-11-29 15:12:00) [10]> Sergg (29.11.2006 14:56:14) [14]
Зато у меня Copy/Paste правильно работают.
А насчет клавиатуры хочешь померяться на скорость, в совокупности с правильностью?
Sergg (2006-11-29 14:56:00) [11]>Anatoly Podgoretsky
Вредный дядька, вы хоть с клавиатурой для начала работать научитесь:
> Откуда жанаая функция найдет блее одного файла, нет же подстановочных
> симвовов.
> И это, научись пользоваться Copy/Paste
Anatoly Podgoretsky (2006-11-29 14:12:00) [12]> Sergg (29.11.2006 13:32:12) [12]
Еще бы, а то завтра потребуется скопировать, а тут всего лишь операцию поменять
Sergg (2006-11-29 13:32:00) [13]>Сергей М.
Спасибо, SHFileOperation-хорошая штука!!!:)
Anatoly Podgoretsky (2006-11-29 12:52:00) [14]> Юрий Зотов (29.11.2006 12:33:10) [10]
> Если нужен пример, то он есть в справке.
И у меня в FAQ на сайте, включая твой пример, как самый образцовый.
Юрий Зотов (2006-11-29 12:33:00) [15]> Sergg (29.11.06 12:09) [8]
Не задана маска для поиска.
Если нужен пример, то он есть в справке.
Anatoly Podgoretsky (2006-11-29 12:31:00) [16]> Sergg (29.11.2006 12:09:08) [8]
Откуда жанаая функция найдет блее одного файла, нет же подстановочных симвовов.
И это, научись пользоваться Copy/Paste
Sergg (2006-11-29 12:09:00) [17]>Anatoly Podgoretsky
Ясное дело, иначе бы я и не приставал к вам с глупыми вопросами;)
код
if FindFirst('D:\Ðåçåðâ_æóðíà ; ;ëîâ\logs', faAnyFile, NextFile) = 0 then
repeat
ShowMessage(NextFile.Name);
until FindNext(NextFile) 0;
FindClose(NextFile);
выдает только "logs" - Это ссылка на папку в которой я и хочу все удалить, и там есть еще файлы, чего оно не работает?
Amoeba (2006-11-29 12:08:00) [18]На http://www.delphikingdom.com("Королевство Delphi") есть целая статья об SHFileOperation.
Anatoly Podgoretsky (2006-11-29 12:01:00) [19]> Sergg (29.11.2006 11:45:00) [0]
Наверно неграмотно грохаешь. Поскольку практически любой путь ведет к заданой цели.
clickmaker (2006-11-29 12:00:00) [20]'D:\Ðåçåðâ_æóðíà ;ëîâ\logs \*.*'
плюс добавь еще проверку на Name '.' and Name '..', иначе влетишь в рекурсию )