在线等待,目录文件问题

kelemaobbs 2004-01-07 06:59:57
取得一个目录下的所有文件和子目录,如果判断是目录还是文件.将目录和文件分开....(尽量简化.....)
...全文
29 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
kelemaobbs 2004-01-07
  • 打赏
  • 举报
回复
if ((DSearchRec.Attr and faDirectory) = faDirectory)
这就是判断是否为目录的意思吧.,呵呵.谢谢了.问题已经解决了.我就是找了半天了.谢谢哈...
nhdj 2004-01-07
  • 打赏
  • 举报
回复
FindFirst, FindNext, FindClose Example

The following example uses an edit control, a button, a string grid, and seven check boxes. The check boxes correspond to the seven possible file attributes. When the button is clicked, the path specified in the edit control is searched for files matching the checked file attributes. The names and sizes of the matching files are inserted into the string grid.

procedure TForm1.Button1Click(Sender: TObject);

var
sr: TSearchRec;
FileAttrs: Integer;
begin
StringGrid1.RowCount := 1;
if CheckBox1.Checked then
FileAttrs := faReadOnly
else
FileAttrs := 0;
if CheckBox2.Checked then
FileAttrs := FileAttrs + faHidden;
if CheckBox3.Checked then
FileAttrs := FileAttrs + faSysFile;
if CheckBox4.Checked then
FileAttrs := FileAttrs + faVolumeID;
if CheckBox5.Checked then

FileAttrs := FileAttrs + faDirectory;
if CheckBox6.Checked then
FileAttrs := FileAttrs + faArchive;
if CheckBox7.Checked then

FileAttrs := FileAttrs + faAnyFile;

with StringGrid1 do
begin
RowCount := 0;

if FindFirst(Edit1.Text, FileAttrs, sr) = 0 then

begin
repeat
if (sr.Attr and FileAttrs) = sr.Attr then
begin
RowCount := RowCount + 1;
Cells[1,RowCount-1] := sr.Name;
Cells[2,RowCount-1] := IntToStr(sr.Size);
end;
until FindNext(sr) <> 0;
FindClose(sr);
end;
end;
end;
nhdj 2004-01-07
  • 打赏
  • 举报
回复
FindFirst的example帮助,很清楚的
huangrenguang 2004-01-07
  • 打赏
  • 举报
回复
下面的方法可以解决你的问题,当然递归的时候传入的参数就是目录,否则就是文件了。
只是你的改造一下。

procedure TMainForm.FindFiles(APath: String);
var
FSearchRec,
DSearchRec: TSearchRec;
FindResult: integer;
// fData:WIN32_FIND_DATA;
function IsDirNotation(ADirName: String): Boolean;
begin
Result := (ADirName = '.') or (ADirName = '..');
end;

begin
APath := GetDirectoryName(APath);
FindResult := FindFirst(APath+FFileName,faAnyFile+faHidden+
faSysFile+faReadOnly,FSearchRec);
try
while FindResult = 0 do
begin
ExtractFileExt(StrPas(FSearchRec.FindData.cFileName));
lbFiles.Items.Add(LowerCase(APath+FSearchRec.Name));
FindInfoInfiles(APath+FSearchRec.Name,edtFileInfo.Text);
FindResult := FindNext(FSearchRec);
end;

FindResult := FindFirst(APath+'*.*', faDirectory, DSearchRec);
while FindResult = 0 do
begin
if ((DSearchRec.Attr and faDirectory) = faDirectory)
and not IsDirNotation(DSearchRec.Name) then
begin
FindFiles(APath+DSearchRec.Name); // Recursion here
end;
FindResult := FindNext(DSearchRec);
end;
finally
FindClose(FSearchRec);
end;
end;
kelemaobbs 2004-01-07
  • 打赏
  • 举报
回复
怎么没人回答我呀?~~我在线等待呀...

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧