我给你个显示目录下所有文件名的例子吧!
procedure TForm1.Button1Click(Sender: TObject);
var
SearchRec:TSearchRec;
ext,AppPath:string;
begin
listbox1.Items.Clear;
AppPath:='d:\aa\';
ext:='*.*';
FindFirst(AppPath+ext,faAnyFile-faDirectory,SearchRec);
listbox1.Items.Add(SearchRec.Name);
while FindNext(SearchRec)=0 do
listbox1.Items.Add(SearchRec.Name);
listbox1.items为你需要的结果
end;
function SearchFile(mainpath, filename: string;
var foundresult: TStrings): Boolean;
var
i: integer;
Found: Boolean;
subdir1: TStrings;
searchRec: TsearchRec;
begin
if GetStrRight(mainpath, 1) <> '\' then mainpath := mainpath + '\';//自己写的,关键判断是否最后一个字符是“\”,你可以自己改一下。
found := False;
if Trim(filename) <> '' then
begin
subdir1 := TStringList.Create;
if (FindFirst(mainpath + '*.*', faDirectory, SearchRec) = 0) then
begin
if (DirectoryExists(mainpath + SearchRec.Name)) and (SearchRec.Name <> '.')
and (SearchRec.Name <> '..') then subdir1.Add(SearchRec.Name);
while (FindNext(SearchRec) = 0) do
begin
if (DirectoryExists(mainpath + SearchRec.Name)) and (SearchRec.Name <> '.')
and (SearchRec.Name <> '..') then subdir1.Add(SearchRec.Name);
end;
end;
FindClose(SearchRec);
//²éÕÒµ±Ç°Ä¿Â¼¡£
if (FindFirst(mainpath + filename, faAnyFile - faDirectory, SearchRec) = 0) then
begin
foundresult.Add(mainpath + SearchRec.Name);
while (FindNext(SearchRec) = 0) do
begin
foundresult.Add(mainpath + SearchRec.Name);
end;
end;
FindClose(SearchRec);
for i := 0 to subdir1.Count - 1 do
found := Searchfile(mainpath + subdir1.Strings[i] + '\', Filename, foundresult) or found;
subdir1.Free;
end;
Result := found;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
ss: TStrings;
begin
ss := TStringList.Create;
SearchFile('C:\whsh\', 'qwe.txt', ss);
memo1.Lines.AddStrings(ss); //在MEMO中实现显示
ss.Free;
end;
function IsValidDir(SearchRec:TSearchRec):Boolean;
begin
if (SearchRec.Attr=16) and
(SearchRec.Name<>'.') and
(SearchRec.Name<>'..') then
Result:=True
else
Result:=False;
end;
2. 这是查询主体函数。
参数介绍:
function SearchFile(mainpath:string; filename:string;
var foundresult:TStrings):Boolean;
var i:integer;
Found:Boolean;
subdir1:TStrings;
searchRec:TsearchRec;
begin
found:=false;
if Trim(filename)<>'' then
begin
subdir1:=TStringList.Create;//字符串列表必须动态生成
//找出所有下级子目录。
if (FindFirst(mainpath+'*.*', faDirectory, SearchRec)=0) then
begin
if IsValidDir(SearchRec) then
subdir1.Add(SearchRec.Name);
while (FindNext(SearchRec) = 0) do
begin
if IsValidDir(SearchRec) then
subdir1.Add(SearchRec.Name);
end;
end;
FindClose(SearchRec);
//查找当前目录。
if FileExists(mainpath+filename) then
begin
found:=true;
foundresult.Add(mainpath+filename);
end;
//这是递归部分,查找各子目录。
for i:=0 to subdir1.Count-1 do
found:=Searchfile(mainpath+subdir1.Strings[i]+
'\',Filename,foundresult)or found;
//资源释放并返回结果。
subdir1.Free;
end;
result:=found;
end;
//接上。。。
function TfrmMain.SelectFolder(const DlgTitle:string): string;
var
bi:TBrowseInfo;
PathIdList:PItemIdList;
strPath:string;
begin
strPath:=stringOfChar(' ',512);
bi.hwndOwner:=Self.handle;
bi.pidlRoot:=nil;
bi.pszDisplayName:=nil;
bi.lpszTitle:=pchar(dlgTitle);
bi.ulFlags:=BIF_ReturnOnlyFsDirs;
bi.lpfn:=nil;
bi.lParam:=0;
bi.iImage:=0;
result:='';
pathIdList:=SHBrowseForFolder(bi);
if pathIdList<>nil then
if SHGetPathFromIdList(pathIdList,pchar(strPath))then
result:=trim(strPath);
end;
procedure TfrmMain.SearchSetDirExecute(Sender: TObject);
var tempPath:string;
begin
tempPath:=SelectFolder('请选择要搜索的文件夹:');
if tempPath<>'' then begin
searchPath:=tempPath;
StuBar1.Panels[1].Text:='搜索目录:'+searchPath;
end;
end;
procedure TfrmMain.SearchSaveAllExecute(Sender: TObject);
var SaveFolder:string;
begin
if lvIcons.Items.count=0 then exit;
SaveFolder:=SelectFolder('请选择要保存的目录:');
if SaveFolder<>'' then SavePic(-1,SaveFolder);
end;
procedure TfrmMain.SearchAndDisp(const schPath: string);
var
targetPath :string;
iconFilePath :string;
FindAttr :integer;
FindSr :TSearchRec;
tmpExt :string;
tmpIcon :Hicon;
tmpPath :string;
I:integer;
begin
//Search icons and display in listView(lvIcons);
targetPath:=schPath;
if rightStr(targetPath,1)<>'\' then targetPath:=targetPath+'\';
tmpPath:=targetPath;
targetPath:=targetPath+'*.*';
stuBar1.Panels[1].Text:='正在搜索 '+targetPath+'...';
findAttr:=sysUtils.faReadOnly+sysUtils.faSysFile+sysUtils.faArchive+sysUtils.faDirectory;
if findFirst(targetPath,findAttr,findSr)<>0 then exit;
repeat
application.ProcessMessages;
if stopSearch=true then exit;
if(findSr.name='.')or(findSr.name='..')then continue;
iconFilePath:=tmpPath+findSr.Name;
tmpExt:=UpperCase(ExtractFileExt(iconFilePath));
if(tmpExt='.EXE')or(tmpExt='.ICO')or(tmpExt='.DLL')then begin
//Extract icons;
I:=0;
while true do begin
tmpIcon:=ExtractIcon(0,pchar(iconFilePath),i);
if tmpIcon=0 then break;
imgTemp.Picture:=nil;
drawIcon(imgTemp.Canvas.Handle,0,0,tmpIcon);
imgTemp.Picture.Icon.Handle:=tmpIcon;
imgIcons.AddIcon(imgTemp.picture.icon);
destroyIcon(tmpIcon);
inc(I);
inc(IconCount);
with lvIcons.Items.add do begin
caption:='ICO-'+intToStr(IconCount);
imageIndex:=iconCount-1;
subItems.Add(iconFilePath);
end;
stuBar1.Panels[0].Text:=intToStr(iconCount);
end;
end;
if(findSr.attr and faDirectory)<>0 then
searchAndDisp(iconFilePath);
until findNext(findSr)<>0;
findClose(findSr);
end;
procedure TfrmMain.SearchStartExecute(Sender: TObject);
begin
if searchPath='' then begin
application.messageBox('请先设置搜索图标的目录!','提示',mb_iconInformation);
exit;
end;
SetButton(false);
stuBar1.Panels[0].Text:='0';
iconCount:=0;
imgIcons.Clear;
lvIcons.Clear;
stopSearch:=false;
frmPre.imgPre.Picture:=nil;
if frmPre.visible=true then frmPre.Close;
SearchAndDisp(searchPath);
stuBar1.Panels[1].Text:='搜索完毕('+searchPath+')。';
SetButton(true);
end;
procedure TfrmMain.SearchStopExecute(Sender: TObject);
begin
stopSearch:=true;
end;
procedure TfrmMain.LvIconsClick(Sender: TObject);
begin
if lvIcons.selected=nil then exit;
imgIcons.getIcon(lvIcons.Selected.Index,frmPre.imgPre.Picture.Icon);
end;
procedure TfrmMain.SavePic(const I: integer;S:string);
var Ic:Ticon;
Id:integer;
SaveAllPath:string;
SaveFileName:string;
begin
//Save picture to Icon;
Ic:=Ticon.Create;
if I<>-1 then begin
imgIcons.GetIcon(I,Ic);
Ic.SaveToFile(s);
Ic.Free;end
else begin
SaveAllPath:=S;
if rightStr(S,1)<>'\'then SaveAllPath:=SaveAllPath+'\';
for Id:=0 to lvIcons.Items.Count-1 do begin
if lvIcons.Items.Item[Id].caption=''then
SaveFileName:=formatDateTime('MMSS',now)else
SaveFileName:=lvIcons.Items.Item[Id].Caption;
Ic:=Ticon.Create;
imgIcons.GetIcon(Id,Ic);
Ic.SaveToFile(saveAllPath+SaveFileName+'.ICO');
Ic.Free;
end;
end;
end;
procedure TfrmMain.LvIconsSelectItem(Sender: TObject; Item: TListItem;
Selected: Boolean);
begin
LvIconsClick(nil);
end;
procedure TfrmMain.SetButton(const IsTrue: boolean);
begin
searchStart.Enabled:=IsTrue;
SearchStop.Enabled:=not IsTrue;
end;
procedure TfrmMain.FormCreate(Sender: TObject);
begin
AppendMenu(GetSystemMenu(application.Handle,true),Mf_separator,0,nil);
screen.HintFont.Color:=clGreen;
SetButton(true);
end;
procedure TfrmMain.HelpTopicExecute(Sender: TObject);
begin
frmHelp.showModal;
end;
procedure TfrmMain.ViewPreExecute(Sender: TObject);
begin
if lvIcons.selected<>nil then
frmPre.show;
end;
procedure TfrmMain.ViewLargeExecute(Sender: TObject);
begin
LvIcons.ViewStyle:=vsIcon;
ViewSmall.Checked:=false;
ViewLarge.Checked:=true;
ViewList.Checked:=false;
ViewDet.Checked:=false;
end;
procedure TfrmMain.ViewSmallExecute(Sender: TObject);
begin
LvIcons.ViewStyle:=vsSmallIcon;
ViewSmall.Checked:=true;
ViewLarge.Checked:=false;
ViewList.Checked:=false;
ViewDet.Checked:=false;
end;
procedure TfrmMain.ViewListExecute(Sender: TObject);
begin
LvIcons.ViewStyle:=vsList;
ViewSmall.Checked:=false;
ViewLarge.Checked:=false;
ViewList.Checked:=true;
ViewDet.Checked:=false;
end;
procedure TfrmMain.ViewDetExecute(Sender: TObject);
begin
LvIcons.ViewStyle:=vsReport;
ViewSmall.Checked:=false;
ViewLarge.Checked:=false;
ViewList.Checked:=false;
ViewDet.Checked:=true;
end;
procedure TfrmMain.SearchSaveExecute(Sender: TObject);
begin
if lvIcons.selected=nil then exit;
SaveIconDlg.FileName:=lvIcons.selected.Caption;
if SaveIconDlg.Execute=false then exit;
savePic(lvIcons.Selected.Index,SaveIconDlg.FileName);
end;