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

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

Удаление всех файлов в папке [D7, WinXP]


Страницы:   1 2

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 '..', иначе влетишь в рекурсию )


Страницы:   1 2

Наверх

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