Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.12.17;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.042 c
2-1164974851
_Gemini_
2006-12-01 15:07
2006.12.17
Динамическое создание ComboBox


2-1164655919
Сладкий
2006-11-27 22:31
2006.12.17
Проблема совместимости или просто ...


2-1164737960
Ezorcist
2006-11-28 21:19
2006.12.17
вопрос про uses


8-1142757370
Kano
2006-03-19 11:36
2006.12.17
Вставка анимированных gif


4-1155307284
ph0sgen
2006-08-11 18:41
2006.12.17
RegSetValueEx ???





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский