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

Вниз

findFirst и findNext   Найти похожие ветки 

 
Pasha L   (2005-06-05 00:55) [0]

Здравствуйте. У меня вопросы, связанные с findFirst и findNext.
1) Что представляют собой постоянные faDirectory и faVolumeID;
2) Как и чем определяется порядок нахождения файлов;
3) Как сделать так, чтобы поиск распространялся только на папки. Сначала я думал, что faDirectory именно для этого. Но он выдает и файлы тоже.
Надеюсь на вашу помощь. Спасибо.


 
Alexander Panov ©   (2005-06-05 01:43) [1]

1.
faVolumeID $00000008 Volume ID files
faDirectory $00000010 Directory files

Как видно из хелпа - метка тома и каталог.

2.
 Только лишь расположением в таблице файлов.

3.
 при получении атрибутов проверять на соответствие:

  if (SearchRecStruct.Attr and faDirectory)=faDirectory then {это каталог};


 
Pasha L   (2005-06-05 13:20) [2]

Тогда зачем же в findfirst прописывать faDirectory, раз потом всё равно надо проверать?


 
Anatoly Podgoretsky ©   (2005-06-05 13:31) [3]

Для того что бы получить кроме рядовых файлов еще и специальные.


 
Pasha L   (2005-06-05 16:22) [4]

Ещё несколько вопросов:
1) Зачем писать if (SearchRecStruct.Attr and faDirectory)=faDirectory , а не просто if SearchRecStruct.Attr=faDirectory ;
2) Применив эту запись, я смог вывести файлы (в данном случае -  папки) только с fadirectory. Остальные значения почему-то не делают своего дела. Почему?
3) Anatoly Podgoretsky, но тогда можно было бы сделать так, чтобы поиск распространялся на все виды файлов и папок, а потом уже с помощью проверки осуществлять фильтрацию. Чувствую, я просто чего-то не могу понять.


 
DiamondShark ©   (2005-06-05 16:27) [5]


> 1) Зачем писать if (SearchRecStruct.Attr and faDirectory)=faDirectory
> , а не просто if SearchRecStruct.Attr=faDirectory ;


Затем, что это битовое поле. Там могут быть и другие флаги.


 
Anatoly Podgoretsky ©   (2005-06-05 16:33) [6]

Pasha L   (05.06.05 16:22) [4]
faAnyFiles


 
Pasha L   (2005-06-05 16:48) [7]


> Затем, что это битовое поле. Там могут быть и другие флаги.

Не понял


 
Pasha L   (2005-06-05 16:53) [8]

DiamondShark, зачем сравнивать faDirectory с faDirectory если они и так, понятное дело, равны?


 
DiamondShark ©   (2005-06-05 16:59) [9]


> DiamondShark, зачем сравнивать faDirectory с faDirectory
> если они и так, понятное дело, равны?

А faDirectory с faDirectory нигде и не сравниваются.
Сравнивается результат побитовой логической операции "И" над Attr и faDirectory со значением faDirectory.
Посмотри численное значение faDirectory. Это константа с одним единичным битом. А Attr может содержать другие биты.


 
Pasha L   (2005-06-05 17:17) [10]

DiamondShark, извини за непонятливость, но можно по-русски?
И ещё. Можно ли сделать так
now:=fahidden; //или другая константа}
//потом идет поиск по now
//и проверка:
if (SearchRecStruct.Attr and now)=now // и тд и тп

такое подействует?


 
Pasha L   (2005-06-05 17:23) [11]

И всё же
> Anatoly Podgoretsky  
> faAnyFiles

Чем тогда отличается поиск с faanyfile от поиска с fadirectory, если они выводят одно и тоже. favolumeid и fahidden тоже выводят одно и то же, хоть выводимые ими файлы не являются ни скрытыми файлами, ни метками тома.


 
DiamondShark ©   (2005-06-05 17:37) [12]


> DiamondShark, извини за непонятливость, но можно по-русски?

Вроде, по-русски написано. Какое слово не понятно?


> такое подействует?

А ты вообще смысл написанного понимаешь? Например, что является результатом операции and.


 
Anatoly Podgoretsky ©   (2005-06-05 17:43) [13]

Pasha L   (05.06.05 17:23) [11]
Чем тогда отличается поиск с faanyfile от поиска с fadirectory, если они выводят одно и тоже. favolumeid и fahidden тоже

Они выводят не одно и тоже.


 
Pasha L   (2005-06-05 18:09) [14]

Anatoly Podgoretsky, у меня выводится одно и то же. В этой программе в StringGrid1 в 4 колонки (faanyfile, fadirectory, favolumeid, fahidden) выводятся файлы и папки, содержащиеся у меня в c:\games. В первых двух колонках в конце концов оказываются все и файлы и папки, а в двух последних все файлы (без папок)
unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, Grids;

type
 TForm1 = class(TForm)
   StringGrid1: TStringGrid;
   procedure FormCreate(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
 a:tsearchrec;
 i,n,n2,now:integer;
 str:string;
begin
 for n:=0 to 3 do begin
   case n of
     0:begin
       now:=faanyfile;
       str:="faanyfile";
     end;
     1:begin
       now:=fadirectory;
       str:="fadirectory";
     end;
     2:begin
       now:=favolumeid;
       str:="favolumeid";
     end;
     3:begin
       now:=fahidden;
       str:="fahidden";
     end;
   end;
   n2:=0;
   stringgrid1.Cells[n,0]:=str;
   i:=findfirst("c:\games\*",now,a);
   while i=0 do begin
     n2:=n2+1;
     if stringgrid1.RowCount<n2 then
       stringgrid1.RowCount:=n2+2;
     stringgrid1.Cells[n,n2]:=a.Name;
     i:=findnext(a);
   end;
   findclose(a);
 end;  
end;

end.


 
Alexander Panov ©   (2005-06-05 19:36) [15]

{$WARN SYMBOL_PLATFORM OFF}
unit Unit1;

interface

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

type
 TForm1 = class(TForm)
   Button4: TButton;
   Edit1: TEdit;
   RadioGroup1: TRadioGroup;
   Memo1: TMemo;
   procedure FormCreate(Sender: TObject);
   procedure FormClose(Sender: TObject; var Action: TCloseAction);
   procedure RadioGroup1Click(Sender: TObject);
   procedure Button4Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;
 List: TStringList;
implementation

{$R *.dfm}

procedure Scan(Dir: String;L: TStringList);
var
   Path: String;
   SR: TSearchRec;
begin
   Path := IncludeTrailingBackSlash(Dir);
   if FindFirst(Path+"*.*",faAnyFile,SR)=0 then
   begin
       try
           repeat
               if (SR.Name=".") or (SR.Name="..") then Continue;
               if (SR.Attr and faDirectory)=faDirectory then
               begin
                   L.Objects[L.Add(Path+SR.Name)] := Pointer(SR.Attr);
                   Scan(Path+SR.Name,L);
               end;
           until FindNext(SR)<>0;
       finally
           Sysutils.FindClose(SR);
       end;
   end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
   List := TStringList.Create;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
   List.Free;
end;

procedure TForm1.RadioGroup1Click(Sender: TObject);
var
   i: Integer;
   Attr: Integer;
begin
   Attr := 0;
   Memo1.Lines.Clear;
   Memo1.Lines.BeginUpdate;
   try
       case RadioGroup1.ItemIndex of
           0: Memo1.Lines.Assign(List);
           1: Attr := faHidden;
           2: Attr := faDirectory;
           3: Attr := faVolumeId;
       end;
       if RadioGroup1.ItemIndex = 0 then Exit;
       for i := 0 to List.Count-1 do
       begin
           if (Integer(List.Objects[i]) and Attr)=Attr then Memo1.Lines.Add(List[i]);
       end;
   finally
       Memo1.Lines.EndUpdate;
   end;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
   List.Clear;
   Scan(Edit1.Text,List);
   RadioGroup1Click(Self);
end;

end.


 
Pasha L   (2005-06-07 23:56) [16]

спасибо. работает



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

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

Наверх




Память: 0.49 MB
Время: 0.035 c
4-1115173372
Алексей Петухов
2005-05-04 06:22
2005.06.29
Перехват конекстной F1


1-1118078113
Лунатик
2005-06-06 21:15
2005.06.29
блок-схема


3-1116234329
Maverick
2005-05-16 13:05
2005.06.29
Передача параметра в ADOStoredProc


14-1117712175
Gero
2005-06-02 15:36
2005.06.29
Что-то форум тормозит


14-1117456273
karat
2005-05-30 16:31
2005.06.29
Программисты из страховых организаций?





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