如何不用驱动器和文件列表控件获取某一目录下面的所有文件的名称等信息(0分)

  • 主题发起人 主题发起人 Alphazw
  • 开始时间 开始时间
A

Alphazw

Unregistered / Unconfirmed
GUEST, unregistred user!
怎么样才能在DELPHI中不用任何VCL就能够获取某一目录下面的文件列表。
用DELPHI中的函数或者API都可以。
目前我还没有积分,但是希望有高手能够帮忙解决一下这个小问题。谢谢!
我的邮箱:crowzw@163.net;alpha@kzinfo.net
 
findfirst(),findnext....
递归查找
 
能否讲一下具体如何应用在DELPHI中,以前我用过VB,现在早就全忘了。谢谢了
 
以下代码不全面,以前的确做过,呵呵
递归过程是自己想的,不知符不符合理论要求
procedure find(dir:String)//参数为搜索目录名
var
file:XX;//(我忘了,在findfirst函数帮助里可以找到)
begin
file:=findfirst('something');
while(file<>NULL)
begin
if (file为目录类型,有个参数) then find(dir+file.文件名)
else findnext(file);
end;
end;
不好意思,好久没接触,连循环语句都快忘了,回去一定补习
file参数有一些属性,很有用,应该看一看
 
我已经自己研究出来如何实现些功能了,是要用到findfirst,findnext,但不是JeffSY所说的那样,所以不能加分。
 
给你看一个所有驱动器通杀的例子,输入文件名,然后找所有的驱动器中有没有该文件
unit FIndFileFrm;

interface

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

type
TFindFileForm = class(TForm)
ButtonFind: TButton;
GroupBox1: TGroupBox;
ListBoxFileFind: TListBox;
GroupBox2: TGroupBox;
EditFileName: TEdit;
ListBoxFileName: TListBox;
ButtonAddFileName: TButton;
ButtonDelFileName: TButton;
ButtonClearFileName: TButton;
ButtonExit: TButton;
StatusBar: TStatusBar;
ButtonCancelFind: TButton;
procedure ButtonFindClick(Sender: TObject);
procedure ButtonAddFileNameClick(Sender: TObject);
procedure ButtonDelFileNameClick(Sender: TObject);
procedure ButtonClearFileNameClick(Sender: TObject);
procedure ButtonCancelFindClick(Sender: TObject);
procedure ButtonExitClick(Sender: TObject);
private
{ Private declarations }
procedure FindFile(Directory: string; FileNameLst: TStrings);
procedure GetDriverInfo;
public
{ Public declarations }
end;

var
FindFileForm: TFindFileForm;
DriverLst: TStrings;
CancelFind: Boolean;
implementation

{$R *.DFM}


procedure tfindfileform.GetDriverInfo;
var
DriveLetter: char;
begin
for DriveLetter := 'A' to 'Z' do
if (GetDriveType(PChar(DriveLetter + ':/')) = DRIVE_REMOVABLE) or (GetDriveType(PChar(DriveLetter + ':/')) = DRIVE_FIXED) or (GetDriveType(PChar(DriveLetter + ':/')) = DRIVE_REMOTE) then
DriverLst.Add(DriveLetter + ':/');
end;

procedure tfindfileform.FindFile(Directory: string; FileNameLst: TStrings);
var
Search, Src: TSearchRec;
RootDirectory: string;
FCount: Integer;
begin
Application.ProcessMessages;
if CancelFind then Exit;
//查找文件
RootDirectory := Directory;
if RootDirectory[Length(RootDirectory)] <> '/' then RootDirectory := RootDirectory + '/';
//先查找文件
for Fcount := 0 to filenamelst.Count - 1 do
if FindFirst(RootDirectory + FileNameLst[FCount], faArchive, Src) = 0 then
ListBoxFileFind.Items.Add(RootDirectory + FileNameLst[FCount]);

//再查目录
if FindFirst(RootDirectory + '*.*', faDirectory, Search) = 0 then
repeat
if (Search.Name <> '.') and (Search.Name <> '..') then
if (Search.Attr and fadirectory) = fadirectory then
begin
StatusBar.Panels[1].Text := '正在查找...' + RootDirectory + Search.Name;
FindFile(RootDirectory + Search.Name, FileNameLst);
end;
until FindNext(Search) <> 0;
FindClose(Search);
end;

procedure TFindFileForm.ButtonFindClick(Sender: TObject);
var
i: Integer;
begin
ButtonCancelFind.Enabled := True;
CancelFind := False;
if ListBoxFileName.Items.Count <> 0 then
begin
DriverLst := TStringList.Create;
try
//查找文件,并添加到ListboxFindFile
GetDriverinfo;
for i := 0 to DriverLst.Count - 1 do
FindFile(DriverLst, ListBoxFileName.Items);
finally
DriverLst.Free;
end;
end;
ButtonCancelFind.Enabled := False;
end;

procedure TFindFileForm.ButtonAddFileNameClick(Sender: TObject);
begin
if EditFileName.Text <> '' then
ListBoxFileName.Items.Add(EditFileName.Text);
end;

procedure TFindFileForm.ButtonDelFileNameClick(Sender: TObject);
begin
if ListBoxFileName.ItemIndex <> -1 then
ListBoxFileName.Items.Delete(ListBoxFileName.ItemIndex);
end;

procedure TFindFileForm.ButtonClearFileNameClick(Sender: TObject);
begin
ListBoxFileName.Items.Clear;
end;

procedure TFindFileForm.ButtonCancelFindClick(Sender: TObject);
begin
CancelFind := True;
end;

procedure TFindFileForm.ButtonExitClick(Sender: TObject);
begin
Close;
end;

end.
 
对不起各位,此问题的讨论到此就要结束了,我提这个问题的时候还没有积分,所有这个问题
不对给各位回答出来问题的朋友积分,在此感谢那些热心帮助我解答这个问题的朋友,谢谢!
我的电子邮箱是:alpha@kzinfo.net;crowzw@163.net;zhangwei_zw@china.com.谢谢各位了!
 
后退
顶部