Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.12.17;
Скачать: CL | DM;

Вниз

Удаление всех файлов в папке   Найти похожие ветки 

 
Sergg   (2006-11-29 11:45) [0]

Подскажите пожалуйста как грамотно грохнуть все файлы в папке?
пробовал FindFirst - FindNext но что-то не очень:(


 
clickmaker ©   (2006-11-29 11:45) [1]


> пробовал FindFirst - FindNext

а как пробовал? И что значит "грамотно"?


 
Сергей М. ©   (2006-11-29 11:49) [2]


> Sergg


см. SHFileOperation


 
Sergg   (2006-11-29 11:57) [3]

>clickmaker
Пробовал где-то так:
 if FindFirst("D:\Ðåçåðâ_æóðí&#224 ;ëîâ\logs", faAnyFile, NextFile) = 0 then
   repeat
     DeleteFile(NextFile.Name);
   until FindNext(NextFile) <> 0;
 FindClose(NextFile);
Грамотно - это так, чтоб не наступать на чужие грабли;)

>Сергей М.
В справке SHFileOperation нету:(


 
Сергей М. ©   (2006-11-29 11:58) [4]


> В справке SHFileOperation нету


Есть.

см. Help -> Windows SDK


 
clickmaker ©   (2006-11-29 12:00) [5]

"D:\&#208;&#229;&#231;&#229;&#240;&#226;_&#230;&#243;&#240;&#237;&#224; ;&#235;&#238;&#226;\logs\*.*"
плюс добавь еще проверку на Name <> "." and Name <> "..", иначе влетишь в рекурсию )


 
Anatoly Podgoretsky ©   (2006-11-29 12:01) [6]

> Sergg  (29.11.2006 11:45:00)  [0]

Наверно неграмотно грохаешь. Поскольку практически любой путь ведет к заданой цели.


 
Amoeba ©   (2006-11-29 12:08) [7]

На http://www.delphikingdom.com ("Королевство Delphi") есть целая статья об SHFileOperation.


 
Sergg   (2006-11-29 12:09) [8]

>Anatoly Podgoretsky

Ясное дело, иначе бы я и не приставал к вам с глупыми вопросами;)

код
if FindFirst("D:\&#208;&#229;&#231;&#229;&#240;&#226;_&#230;&#243;&#240;&#237;&#224 ; ;&#235;&#238;&#226;\logs", faAnyFile, NextFile) = 0 then
  repeat
    ShowMessage(NextFile.Name);
  until FindNext(NextFile) <> 0;
FindClose(NextFile);
выдает только "logs" - Это ссылка на папку в которой я и хочу все удалить, и там есть еще файлы, чего оно не работает?


 
Anatoly Podgoretsky ©   (2006-11-29 12:31) [9]

> Sergg  (29.11.2006 12:09:08)  [8]

Откуда жанаая функция найдет блее одного файла, нет же подстановочных симвовов.
И это, научись пользоваться Copy/Paste


 
Юрий Зотов ©   (2006-11-29 12:33) [10]

> Sergg   (29.11.06 12:09) [8]

Не задана маска для поиска.

Если нужен пример, то он есть в справке.


 
Anatoly Podgoretsky ©   (2006-11-29 12:52) [11]

> Юрий Зотов  (29.11.2006 12:33:10)  [10]

> Если нужен пример, то он есть в справке.

И у меня в FAQ на сайте, включая твой пример, как самый образцовый.


 
Sergg   (2006-11-29 13:32) [12]

>Сергей М.
Спасибо, SHFileOperation-хорошая штука!!!:)


 
Anatoly Podgoretsky ©   (2006-11-29 14:12) [13]

> Sergg  (29.11.2006 13:32:12)  [12]

Еще бы, а то завтра потребуется скопировать, а тут всего лишь операцию поменять


 
Sergg   (2006-11-29 14:56) [14]

>Anatoly Podgoretsky

Вредный дядька, вы хоть с клавиатурой для начала работать научитесь:


> Откуда жанаая функция найдет блее одного файла, нет же подстановочных
> симвовов.
> И это, научись пользоваться Copy/Paste


 
Anatoly Podgoretsky ©   (2006-11-29 15:12) [15]

> Sergg  (29.11.2006 14:56:14)  [14]

Зато у меня Copy/Paste правильно работают.
А насчет клавиатуры хочешь померяться на скорость, в совокупности с правильностью?


 
Sergg   (2006-11-29 15:17) [16]

Ладно, ладно, это я так;)))


 
clickmaker ©   (2006-11-29 15:21) [17]


> [16] Sergg   (29.11.06 15:17)
> Ладно, ладно, это я так;)))

c Анатолием бесполезно соревноваться. У него конфискованный спам-робот заготовлен на этот случай


 
Дмитрий Белькевич ©   (2006-11-29 16:21) [18]

Вот что пользую, никогда не отказывало, хотя я особенно много им и не стирал, насколько помню, большей частью из 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;


 
Anatoly Podgoretsky ©   (2006-11-29 16:32) [19]

> clickmaker  (29.11.2006 15:21:17)  [17]

Не конфискованный, а патентованый


 
clickmaker ©   (2006-11-29 16:44) [20]


> if (FileInfo.Name[1] <> ".")

а если у меня какой-нить .htaccess?


 
Anatoly Podgoretsky ©   (2006-11-29 16:46) [21]

Естественно это ошибка, сравнение должно быть точное, а не по первому символу.


 
alex_*** ©   (2006-11-29 16:49) [22]

пишем батник: del *.* и напускаем на него ShellExecute. все вопросы к удалению к командному интерпретатору


 
alex_*** ©   (2006-11-29 16:49) [23]

+ получаем охренительно настраиваемое удаление


 
Игорь Шевченко ©   (2006-11-29 17:50) [24]

Можно я тоже свои 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;



Страницы: 1 вся ветка

Текущий архив: 2006.12.17;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.042 c
2-1164851992
Nostradamus
2006-11-30 04:59
2006.12.17
Как закрыть Popup и открыть его СРАЗУ снова


2-1164710988
Steep
2006-11-28 13:49
2006.12.17
Автологон


15-1164569690
Горгер
2006-11-26 22:34
2006.12.17
Установка SoftICE


15-1164306475
ZMan
2006-11-23 21:27
2006.12.17
Найти песенку


6-1153812560
Kacnep
2006-07-25 11:29
2006.12.17
Динамическая привязка OnConnect в КОНСОЛЬНОМ приложении