Форум: "Основная";
Текущий архив: 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.039 c