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

Вниз

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

 
Тетрис2009   (2009-03-17 09:44) [0]

подскажите алгоритм поиска всех файлов в папках.
Есть папки и в каждой могут быть тоже папки.То есть 2 уровня.
В них JPEG и надо их посчитать (но посчитать те которые меньше 5 мегов весят, если он больше то это РАВ и его считать не надо)
возможна адаптпция алгоритма удаления всех файлов - там только
заменить удаление на проверку размера и подсчет

Пока набросал алгоритм на ВСЛ - считает количество всех JPG
в папках первого уровня. перебрать папки второго уровня не получается


 
Тетрис2009   (2009-03-17 09:44) [1]

сообственно код


unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 StdCtrls, FileCtrl;

type
 TForm1 = class(TForm)
   Button1: TButton;
   DriveComboBox1: TDriveComboBox;
   FileListBox1: TFileListBox;
   FOLDERS: TListBox;
   FileListBox2: TFileListBox;
   Edit1: TEdit;
   LIST: TListBox;
   SaveDialog1: TSaveDialog;
   Button2: TButton;
   procedure DriveComboBox1Change(Sender: TObject);
   procedure Button1Click(Sender: TObject);
   procedure Button2Click(Sender: TObject);

 private
   { Private declarations }
 public
   { Public declarations }
   procedure FindFolder (Sender: TObject);
   procedure FindFolderLevel2(Sender: TObject);
   procedure CountJpg(Sender: TObject);
 end;

var
 Form1: TForm1;
 ALL:dword;

implementation

{$R *.DFM}

procedure TForm1.DriveComboBox1Change(Sender: TObject);
begin

FileListBox1.Drive:=DriveComboBox1.Drive;

end;

//----------------------------
function Spliter(s:string):string;
begin
Result:=copy(s,2,length(s)-2);
end;
//-------------------------------
procedure TForm1.FindFolder(Sender: TObject);
var
a:dword;
s:string;
begin
FOLDERS.Items.Clear;
for a:=0 to FileListBox1.Items.Count-1 do begin
                                         s:=Spliter(FileListBox1.Items.Strings[a]);
                                         s:=Edit1.text+s;
                                         FOLDERS.Items.Add(s);
                                         end;

end;
//---------------------------------------
procedure TForm1.FindFolderLevel2(Sender: TObject);
label e;
var
a,b,c:dword;
s,m:string;
begin
a:=FOLDERS.Items.Count-1;

for b:=0 to a do begin
                s:=FOLDERS.Items.Strings[b]; // Папка
                s:=Edit1.text+s;
                s:=DriveComboBox1.Drive+":\"+s;
                showmessage(s);
                FileListBox1.Directory:=s;
                FileListBox1.Update;

                showmessage(inttostr(FileListBox1.Items.Count));
                if FileListBox1.Items.Count=-1 then goto e;
                for c:=0 to FileListBox1.Items.Count-1 do begin
                                         m:=Spliter(FileListBox1.Items.Strings[a]);
                                         FOLDERS.Items.Add(s+"\"+m);
                                         end;
                                         e:
                showmessage("1");
                                         end;

end;
//---------------------------------------
procedure TForm1.CountJpg(Sender: TObject);
var
a:dword;
s,x:string;
begin
for a:=0 to FOLDERS.Items.Count-1 do begin
                                    x:=FOLDERS.Items.Strings[a];
                                    s:=DriveComboBox1.Drive+":\"+Edit1.text+x;
                                    FileListBox2.Directory:=s;
                                    FileListBox2.Update;

                                    ALL:=ALL+FileListBox2.Items.Count;
                                    LIST.Items.Add(x+ "       ="+inttostr(FileListBox2.Items.Count));

                                         end;

end;
//---------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
begin
ALL:=0;
FindFolder(Self);
//FindFolderLevel2(Self);
CountJpg(Self);
LIST.Items.Add("");
LIST.Items.Add(inttostr(ALL));
end;
//-------------------
procedure TForm1.Button2Click(Sender: TObject);
begin
if SaveDialog1.Execute=true then begin
                                LIST.Items.SaveToFile(SaveDialog1.FileName+".txt");
                                end;
end;

end.



 
Ega23 ©   (2009-03-17 09:57) [2]

FindFirst + FindNext + f1


 
немо2   (2009-03-17 10:03) [3]

а поискать сначала?
первые же строки в поисковике

файлы в каталоге
procedure ListFileDir(Path: string; FileList: TStrings);
var
  SR: TSearchRec;
begin
  if FindFirst(Path + "*.*", faAnyFile, SR) = 0 then
  begin
    repeat
      if (SR.Attr <> faDirectory) then
      begin
        FileList.Add(SR.Name);
      end;
    until FindNext(SR) <> 0;
    FindClose(SR);
  end;
end;

======================
каталоги в каталоге

procedure GetTreeDirs(Root: string; OutPaper: TStringList);
var
 i: Integer;
 s: string;

 procedure InsDirs(s: string; ind: Integer; Path: string; OPaper: TStringList);
 var {Вставляет в Memo список вложенных директорий}
   sr: TSearchRec;
   attr: Integer;
 begin
   attr := 0;
   attr := faAnyFile;
   if DirectoryExists(Path) then
     if FindFirst(IncludeTrailingBackslash(Path) + "*.*", attr, SR) = 0 then
     begin
       repeat
         if (sr.Attr = faDirectory) and (sr.Name[Length(sr.Name)] <> ".") then
           OPaper.Insert(ind, s + sr.Name);
       until (FindNext(sr) <> 0);
       FindClose(SR);
     end
 end;

begin
 {Проверяем существуетли начальный каталог}
 if not DirectoryExists(Root) then
   exit;
 {Создаем список каталогов первой вложенности}
 if root[Length(Root)] <> "\" then
   InsDirs(root + "\", OutPaper.Count, Root, OutPaper)
 else
   InsDirs(root, OutPaper.Count, Root, OutPaper);
 i := 0;
 repeat
   s := OutPaper[i]; //в s получаем путь к уже внесенному в список кат.
   // Вставляем сразу за данной директорией в списке,
   // список вложенных в нее директорий.
   // Тем самым увеличиваем OutPaper.Lines.Count.
   // Таким образом катологи в которых поиск еще не производился,
   // оказываются ниже и очереь до них еще дойдет.
   InsDirs(s + "\", i + 1, OutPaper[i], OutPaper);
   inc(i);
 until (i = OutPaper.Count);
end;

Пример использования:

procedure TForm1.Button1Click(Sender: TObject);
var
 Strs: TStringList;
begin
 Strs := TStringList.Create;
 try
   GetTreeDirs("C:\", Strs);
   FillTreeViewWithFiles(TreeView1, Strs);
 finally
   Strs.Free;
 end;
end;


 
Skyle ©   (2009-03-17 10:16) [4]


> немо2   (17.03.09 10:03) [3]

Олег в [2] уже сказал где искать. В справке по этим функциям есть пример, в котором всё делается через рекурсию и делается несколько компактнее.



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

Форум: "Начинающим";
Текущий архив: 2009.04.26;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.008 c
2-1236876949
Timur
2009-03-12 19:55
2009.04.26
Сравнение массивов


2-1236634530
Дмитрий Белькевич
2009-03-10 00:35
2009.04.26
Как правильнее закрывать приложение? App.Terminate или Close


15-1235654209
Кто б сомневался
2009-02-26 16:16
2009.04.26
Анабиоз. Сон разума.


15-1235259659
Nic
2009-02-22 02:40
2009.04.26
TWebBrowser


2-1237208496
DmitriyR
2009-03-16 16:01
2009.04.26
Динамический массив





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский