Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Алгоритм обхода файловой системы


Автор: Stalkerdi 5.5.2005, 16:39
Что такое "Алгоритм обхода файловой системы", для чего это надо, зачем и почему. Прошу дать ак можно больше инфы, ссылки или ещё что-нить, плиз smile
Добавлено @ 16:41
И еще вопрос: Что такое фрактальные алгоритмы, для чего они , зачем и почему.

Автор: ~FoX~ 5.5.2005, 16:49
Да все просто:
Файловая система представляется как дерево с кучий ветвей и путей, для полного обхода дерева каталогов и файлов в них необходимо либо знать их количество либо использовать рекурсию
Код

//==================Поиск файлов==============
procedure GetFile(Dir: string; ras: string);
var
  f : TSearchRec;
  i : integer;
  s, key : string;
begin
  i := FindFirst(Dir+ras, faAnyFile, f);
   while (i=0) do
    begin
     s := Dir+f.Name;
     i := FindNext(f);
     Application.ProcessMessages;
    end;
  FindClose(f);
end;

//==================Поиск дирикторий==============
procedure GetDir(Dir: string);
var
  f : TSearchRec;
  i : integer;
  JPGFlag: Boolean;
begin
  i := FindFirst(Dir+'*.*', faDirectory, f);
 GetFile(Dir, '*.BMP')
  while (i=0) do
    begin
    if (f.Name='.') or (f.Name='..') then
    else
      begin
      if (f.Attr and faDirectory)<>0 then
        begin
          GetDir(Dir+f.Name+'\');
          Application.ProcessMessages;
        end
      else
        begin
         i := FindNext(f);
        end;
      end;
      i := FindNext(f);
      Application.ProcessMessages;
    end;
  FindClose(f);
end;



Рекурсия это когда функция вызывает саму себя или свой кусок.
В этом примере две функции вызывают друг друга рекурсивно.

Автор: Yanis 5.5.2005, 17:11
Цитата
Рекурсия это когда функция вызывает саму себя или свой кусок.
Как это кусок?

Цитата
//==================Поиск файлов==============
procedure GetFile(Dir: string; ras: string);
var
  f : TSearchRec;
  i : integer;
  s, key : string;
begin
  i := FindFirst(Dir+ras, faAnyFile, f);
  while (i=0) do
    begin
    s := Dir+f.Name;
    i := FindNext(f);
    Application.ProcessMessages;
    end;
  FindClose(f);
end;
Где здесь рекурсия?

Цитата
В этом примере две функции вызывают друг друга рекурсивно.
Это вроде 2 процедуры!

Автор: batigoal 5.5.2005, 17:31
Как-то у вас все сложно. Вот пример метода на Java для каскадного удаления папки:
Код

private void cascadeDelete(File f)
{
   if(f.isDirectory() && f.listFiles().length!=0)
   {
       File[] filesInDir = f.listFiles();
       for(int i=0; i<filesInDir.length; i++)
       {
            cascadeDelete(filesInDir[i]);
        }
     }
     f.delete();
}


В нем и рекурсия есть.

Автор: ~FoX~ 6.5.2005, 08:29
Yanis
Функция GetDir рекурсивно вызывает себя.
А две просто потому что мне удобно было именно так в проекте сделать, и править лениво smile

Автор: NeoN2k 6.5.2005, 12:24
Цитата(Lamer @ 5.5.2005, 17:31)
Как-то у вас все сложно. Вот пример метода на Java для каскадного удаления папки

Ну.... не тормози.... тута Delphi а не Java... флудишь...(сорри за флуд)

Автор: batigoal 6.5.2005, 13:09
NeoN2k Это где ты такое увидел??? Вот вопрос:

Цитата(Stalkerdi @ 5.5.2005, 17:39)
Что такое "Алгоритм обхода файловой системы", для чего это надо, зачем и почему. Прошу дать ак можно больше инфы, ссылки или ещё что-нить, плиз 
И еще вопрос: Что такое фрактальные алгоритмы, для чего они , зачем и почему.


Где здесь слово "Delphi"??

Автор: ~FoX~ 6.5.2005, 13:11
Lamer George
Тема перемещена из раздела Delphi - общие вопросы.

Автор: batigoal 6.5.2005, 13:17
Тогда - сорри за резкость.

Автор: Чердак 6.5.2005, 20:05
smile ~FoX~, а не мог бы ты по подробнее описать процедуру GetDir, просто Delphi тока начал изучать и не совсем понимаю, что мне данная процедура даст, смогу ли я с помощью нее вывести каталог диска. Просто нужно создать файловый менеджр и почему-то решил, что лучше попробовать на Delphi.

Автор: batigoal 9.5.2005, 14:51
Чердак зря smile

Автор: Чердак 9.5.2005, 19:09
Lamer George, а на чем лучше? smile

Автор: batigoal 9.5.2005, 21:25
На чем лучше - это вопрос для религиозных войн. smile Я бы делал на Java, потому что знаю его лучше всего. Делал когда-то и на Си. А Delphi не владею. Но это все непринципиально.

Автор: ~FoX~ 11.5.2005, 10:49
Цитата
~FoX~, а не мог бы ты по подробнее описать процедуру GetDir, просто Delphi тока начал изучать и не совсем понимаю, что мне данная процедура даст, смогу ли я с помощью нее вывести каталог диска


Что конкретно тебе не понятно?

Код

procedure GetFile(Dir: string; ras: string); 
//Dir - путь где искать будем, Ras - расширенеие(можно выкинуть за ненадобностью)
var
  f : TSearchRec; //Структура где храниться вся инфа о найденных вайлах
  i : integer; //Счетчик который возвращает не 0 если найденый фалы
 s : string; //Сюда кладем путь
begin //Поехали
  i := FindFirst(Dir+ras, faAnyFile, f); //Ищем первый каталог удовлетворяющий условию
  while (i=0) do  //Пока счетчик не равен 0 продолжаем искать
    begin 
    s := Dir+f.Name; //Положили имечко сюда
    i := FindNext(f); //Ищем следующий каталог
    Application.ProcessMessages; //Разрешаем процессу реагировать на внешнее воздействие )))
    end;
  FindClose(f); //Баста
end;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)