Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.08.2009, 11:29   #1
guffer
Пользователь
 
Регистрация: 07.07.2009
Сообщений: 58
По умолчанию Извините за частые вопросы но...

Как найти на диске все пустые папки и удалить их?
guffer вне форума Ответить с цитированием
Старый 19.08.2009, 11:49   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Поиском рекурсивным. Тут уже обсуждалось с примерами.
http://www.programmersforum.ru/showt...ighlight=findA
Например.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.08.2009, 22:52   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

вот, писал как-то...
буду рад, если кому-то пригодится.

Код:
program EmptyDirList;
{$APPTYPE CONSOLE}

uses SysUtils, Windows;

var
  IOCode        : integer;
  cDir0         : string;

function StrAnsiToOem(const S: AnsiString): AnsiString;
begin
  SetLength(Result, Length(S));
  AnsiToOemBuff(@S[1], @Result[1], Length(S));
end;

function FilesCountInScanDirectory( cDirName : string) : integer;
var
  lCountResult    : integer;
  SearchRec       : TSearchRec;
  isFound         : integer;
begin
  lCountResult := 0;
  isFound := FindFirst( cDirName+'\*.*', faAnyFile, SearchRec);
  while ( isFound = 0 ) do begin
     if (SearchRec.Attr and faDirectory)<>0 then begin
         if (Trim(SearchRec.Name)<>'.') and
              (Trim(SearchRec.Name)<>'..') then begin
           lCountResult := FilesCountInScanDirectory(
                             cDirName+'\'+SearchRec.Name) + lCountResult;
         end
       end
     else
       lCountResult := lCountResult + 1;
     isFound := FindNext(SearchRec)
  end;
  SysUtils.FindClose(SearchRec);
  Result := lCountResult;
  if lCountResult = 0 then begin
     WriteLn( 'NOW you can delete FOLDER - '+ strAnsiToOem(cDirName));
     {$I-}
     // убрать комментарий строки ниже, чтобы пустые папки УДАЛЯЛИСЬ!!!!!!
     //     RmDir(cDirName);  // ВНИМАНИЕ!! ПАПКИ УДАЛЯЮТСЯ данной командой!
     IOCode := IOResult;
     if IOCode <> 0 then
       WriteLn('Cannot remove directory ',strAnsiToOem(cDirName),' Error code:',IOCode)
     else
       WriteLn('Directory ', strAnsiToOem(cDirName), ' removed ');
     {$I+}
  end
end;

begin
  // директория, с которой нужно начинать просмотр дерева каталогов
  // можно брать, например, из командной строки cDir0 := ParamStr(1);
  cDir0 := 'C:\TESTIN2';
  // рекурсивно обойти дерово начиная с папки CDir0
  FilesCountInScanDirectory( cDir0 );
  WriteLn('Done.');
end.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
извините у меня ещё один вопрос помагите пожалуста ilnar Помощь студентам 3 23.05.2009 12:06
Access 2003 запрос из зараннее неизвестного колл - ва и имен таблиц (извините за дублюж срочно нужно) Valerra Microsoft Office Access 1 28.01.2009 12:04
вопросы MAcK Win Api 7 21.07.2007 18:08