如何区分文件和文件夹?(100分)

  • 主题发起人 主题发起人 gaobangsheng
  • 开始时间 开始时间
G

gaobangsheng

Unregistered / Unconfirmed
GUEST, unregistred user!
var
FindResult: integer;
FSearchRec, DSearchRec: TSearchRec;
APath : String;
i : Integer;
AFiles : TStrings;
begin
AFiles := TStringList.Create;
APath := Path;
if APath[Length(APath)] <> '/' then
APath := APath + '/';

FindResult := FindFirst(APath+'*.*', faDirectory , FSearchRec); //在根目录中查找指定文件

try
while FindResult = 0 do
begin
if (FSearchRec.Name = '.') or (FSearchRec.Name = '..') then Continue;
Files.Add(FSearchRec.Name);
FindResult := FindNext(FSearchRec); // 查找下一个指定文件
end;
finally
FindClose(FSearchRec);
end;


这个是用来查文件夹的,同样也想查文件,就是分开查,不要看隐藏的!
我是想分开查,但是最后查出来的文件夹和文件都乱的,不知怎么回事?
FindFirst()中选择的类型是这几个,不知每个是做什么的,请帮忙!
faReadOnly = $00000001 platform;
faHidden = $00000002 platform;
faSysFile = $00000004 platform;
faVolumeID = $00000008 platform;
faDirectory = $00000010;
faArchive = $00000020 platform;
faSymLink = $00000040 platform;
faAnyFile = $0000003F;
 
给你一个函数,你可以判断了。
function IsValidDir(SearchRec: TSearchRec): Boolean;
begin
result:= (SearchRec.Attr and faDirectory = faDirectory) and (SearchRec.Name <> '.') and (SearchRec.Name <> '..');
end;
 
function IsValidDir(SearchRec: TSearchRec): Boolean;
begin
result:= (SearchRec.Attr and faDirectory = faDirectory) and (SearchRec.Name <> '.') and (SearchRec.Name <> '..');
end; //这样就可以了~
 
function IsValidDir(SearchRec:TSearchRec):Boolean;
begin
if ((SearchRec.Attr=16) or (SearchRec.Attr=48)) and
(SearchRec.Name<>'.') and
(SearchRec.Name<>'..') then
Result:=True
else Result:=False;
end;
 
上面过滤出来的方法都是针对文件夹的,怎么过滤出一般的可见文件呢?
 
我使用你的代码测试,其实,现在你的代码已经可以实现你的功能。
var
FindResult:integer;
FSearchRec,DSearchRec:TSearchRec;
APath:string;
i:integer;
AFiles:TStrings;
begin
AFiles:=TStringList.Create;
APath:='c:/test/';
if APath[Length(APath)]<>'/' then
APath:=APath+'/';

FindResult:=FindFirst(APath+'*.*',faDirectory,FSearchRec); //在根目录中查找指定文件

try
while FindResult=0 do
begin
if not((FSearchRec.Name='.')or(FSearchRec.Name='..')) then
begin
if FSearchRec.Attr=faHidden then
Files.Items.Add(FSearchRec.Name+' 隐藏')
else if FSearchRec.Attr=faDirectory then
Files.Items.Add(FSearchRec.Name+' 目录')//只要目录
//else
// Files.Items.Add(FSearchRec.Name+' 文件');
end;
FindResult:=FindNext(FSearchRec); // 查找下一个指定文件
end;
finally
FindClose(FSearchRec);
end;
如果你想查目录,就把查文件的取消。另外,如果是隐藏的,这样显示不出来的。
 
后退
顶部