// 把指定目录下的所有文件名放到TStringList里 function SearchFiles(dir: string): TStringList; var find: TSearchRec; file1: PChar; fattr: integer; ff: integer; begin Result := TStringList.Create; file1 := PChar(dir + '\*.*'); fattr := faReadOnly + faArchive; ff := FindFirst(file1, fattr, find); while ff = 0 do begin Result.Add(find.Name); ff := FindNext(find); end; end;
OpenDialog只能选一个文件.推薦TRzSelectFolderDialog
function FindFiles(APath:string):String; var SearchRec:TSearchRec; FileAttrs: Integer; begin Result:=''; FileAttrs:=faAnyFile; If FindFirst(APath+'\*.*',FileAttrs,SearchRec) = 0 then begin try If(SearchRec.Name<>'.') and (SearchRec.Name<>'..') then begin If SearchRec.Attr = faDirectory then Result:=Result+FindFiles(APath+'\'+SearchRec.Name) Else Result:=Result+SearchRec.Name+#13#10; end; While FindNext(SearchRec)=0 do begin If(SearchRec.Name<>'.') and (SearchRec.Name<>'..') then begin If SearchRec.Attr = faDirectory then Result:=Result+FindFiles(APath+'\'+SearchRec.Name) Else Result:=Result+SearchRec.Name+#13#10; end; end; finally FindClose(SearchRec); end; end; end;
调用这个函数就可以选择目录了function SelectPath(const Title: string): string; var bi: TBrowseInfo; //uses ShlObj IdList: PItemIDList; begin result := ''; FillChar(bi, SizeOf(bi), 0); bi.hwndOwner := 0; bi.lpszTitle := PChar(Title); bi.ulFlags := BIF_RETURNONLYFSDIRS{ + BIF_DONTGOBELOWDOMAIN}; IdList := SHBrowseForFolder(bi); if IdList<>nil then begin SetLength(result, 255); SHGetPathFromIDList(IdList, PChar(result)); result := string(pchar(result)); if result<>'' then if result[Length(result)] <>'\' then result := result + '\'; end; end;
function FindFiles(APath:string):String; var SearchRec:TSearchRec; FileAttrs: Integer; begin Result:=''; FileAttrs:=faAnyFile; If FindFirst(APath+'\*.*',FileAttrs,SearchRec) = 0 then begin try If(SearchRec.Name<>'.') and (SearchRec.Name<>'..') then begin If SearchRec.Attr = faDirectory then Result:=Result+FindFiles(APath+'\'+SearchRec.Name) Else Result:=Result+SearchRec.Name+#13#10; end; While FindNext(SearchRec)=0 do begin If(SearchRec.Name<>'.') and (SearchRec.Name<>'..') then begin If SearchRec.Attr = faDirectory then Result:=Result+FindFiles(APath+'\'+SearchRec.Name) Else Result:=Result+SearchRec.Name+#13#10; end; end; finally FindClose(SearchRec); end; end; end;
to fengqingwanzhong(风情万种 不错,学习
OpenDialog可以选择多个文件啊,当然了你也可以像上面各位老大说的使用递归,但是我感觉你好像不是这个意思,递归就不给你写了,这里只是提一下OpenDialog选择多个文件 设置OpenDialog的Option属性中的opAllowMultiSelect为True,之后用如下方法得到文件名 procedure TForm1.btn1Click(Sender: TObject); var i:Integer; begin dlgOpen1.Execute; for i:=0 to dlgOpen1.Files.Count-1 do ShowMessage(dlgOpen1.Files[i]); end; 不知道有用否
function SearchFiles(dir: string): TStringList; var find: TSearchRec; file1: PChar; fattr: integer; ff: integer; begin Result := TStringList.Create; file1 := PChar(dir + '\*.*'); fattr := faReadOnly + faArchive; ff := FindFirst(file1, fattr, find); while ff = 0 do begin Result.Add(find.Name); ff := FindNext(find); end; end; 可以
function SearchFiles(dir: string): TStringList; var find: TSearchRec; file1: PChar; fattr: integer; ff: integer; begin Result := TStringList.Create; file1 := PChar(dir + '\*.*'); fattr := faReadOnly + faArchive; ff := FindFirst(file1, fattr, find); while ff = 0 do begin Result.Add(find.Name); ff := FindNext(find); end; end;
搜索整个目录及子目录下文件用以上楼主方法function FindFiles(APath:string):String; var SearchRec:TSearchRec; FileAttrs: Integer; begin Result:=''; FileAttrs:=faAnyFile; If FindFirst(APath+'\*.*',FileAttrs,SearchRec) = 0 then begin try If(SearchRec.Name<>'.') and (SearchRec.Name<>'..') then begin If SearchRec.Attr = faDirectory then Result:=Result+FindFiles(APath+'\'+SearchRec.Name) Else Result:=Result+SearchRec.Name+#13#10; end; While FindNext(SearchRec)=0 do begin If(SearchRec.Name<>'.') and (SearchRec.Name<>'..') then begin If SearchRec.Attr = faDirectory then Result:=Result+FindFiles(APath+'\'+SearchRec.Name) Else Result:=Result+SearchRec.Name+#13#10; end; end; finally FindClose(SearchRec); end; end; end;
不过它不是那种对话框控件
function SearchFiles(dir: string): TStringList;
var
find: TSearchRec;
file1: PChar;
fattr: integer;
ff: integer;
begin
Result := TStringList.Create;
file1 := PChar(dir + '\*.*');
fattr := faReadOnly + faArchive;
ff := FindFirst(file1, fattr, find);
while ff = 0 do
begin
Result.Add(find.Name);
ff := FindNext(find);
end;
end;
var
SearchRec:TSearchRec;
FileAttrs: Integer;
begin
Result:='';
FileAttrs:=faAnyFile;
If FindFirst(APath+'\*.*',FileAttrs,SearchRec) = 0 then
begin
try
If(SearchRec.Name<>'.') and (SearchRec.Name<>'..') then
begin
If SearchRec.Attr = faDirectory then
Result:=Result+FindFiles(APath+'\'+SearchRec.Name)
Else
Result:=Result+SearchRec.Name+#13#10;
end;
While FindNext(SearchRec)=0 do
begin
If(SearchRec.Name<>'.') and (SearchRec.Name<>'..') then
begin
If SearchRec.Attr = faDirectory then
Result:=Result+FindFiles(APath+'\'+SearchRec.Name)
Else
Result:=Result+SearchRec.Name+#13#10;
end;
end;
finally
FindClose(SearchRec);
end;
end;
end;
var
bi: TBrowseInfo; //uses ShlObj
IdList: PItemIDList;
begin
result := '';
FillChar(bi, SizeOf(bi), 0);
bi.hwndOwner := 0;
bi.lpszTitle := PChar(Title);
bi.ulFlags := BIF_RETURNONLYFSDIRS{ + BIF_DONTGOBELOWDOMAIN};
IdList := SHBrowseForFolder(bi);
if IdList<>nil then
begin
SetLength(result, 255);
SHGetPathFromIDList(IdList, PChar(result));
result := string(pchar(result));
if result<>'' then
if result[Length(result)] <>'\' then
result := result + '\';
end;
end;
var
SearchRec:TSearchRec;
FileAttrs: Integer;
begin
Result:='';
FileAttrs:=faAnyFile;
If FindFirst(APath+'\*.*',FileAttrs,SearchRec) = 0 then
begin
try
If(SearchRec.Name<>'.') and (SearchRec.Name<>'..') then
begin
If SearchRec.Attr = faDirectory then
Result:=Result+FindFiles(APath+'\'+SearchRec.Name)
Else
Result:=Result+SearchRec.Name+#13#10;
end;
While FindNext(SearchRec)=0 do
begin
If(SearchRec.Name<>'.') and (SearchRec.Name<>'..') then
begin
If SearchRec.Attr = faDirectory then
Result:=Result+FindFiles(APath+'\'+SearchRec.Name)
Else
Result:=Result+SearchRec.Name+#13#10;
end;
end;
finally
FindClose(SearchRec);
end;
end;
end;
不错,学习
设置OpenDialog的Option属性中的opAllowMultiSelect为True,之后用如下方法得到文件名
procedure TForm1.btn1Click(Sender: TObject);
var
i:Integer;
begin
dlgOpen1.Execute;
for i:=0 to dlgOpen1.Files.Count-1 do
ShowMessage(dlgOpen1.Files[i]);
end;
不知道有用否
var
find: TSearchRec;
file1: PChar;
fattr: integer;
ff: integer;
begin
Result := TStringList.Create;
file1 := PChar(dir + '\*.*');
fattr := faReadOnly + faArchive;
ff := FindFirst(file1, fattr, find);
while ff = 0 do
begin
Result.Add(find.Name);
ff := FindNext(find);
end;
end;
可以
var
find: TSearchRec;
file1: PChar;
fattr: integer;
ff: integer;
begin
Result := TStringList.Create;
file1 := PChar(dir + '\*.*');
fattr := faReadOnly + faArchive;
ff := FindFirst(file1, fattr, find);
while ff = 0 do
begin
Result.Add(find.Name);
ff := FindNext(find);
end;
end;
var
SearchRec:TSearchRec;
FileAttrs: Integer;
begin
Result:='';
FileAttrs:=faAnyFile;
If FindFirst(APath+'\*.*',FileAttrs,SearchRec) = 0 then
begin
try
If(SearchRec.Name<>'.') and (SearchRec.Name<>'..') then
begin
If SearchRec.Attr = faDirectory then
Result:=Result+FindFiles(APath+'\'+SearchRec.Name)
Else
Result:=Result+SearchRec.Name+#13#10;
end;
While FindNext(SearchRec)=0 do
begin
If(SearchRec.Name<>'.') and (SearchRec.Name<>'..') then
begin
If SearchRec.Attr = faDirectory then
Result:=Result+FindFiles(APath+'\'+SearchRec.Name)
Else
Result:=Result+SearchRec.Name+#13#10;
end;
end;
finally
FindClose(SearchRec);
end;
end;
end;