如何列出ListBox中的所有Dir文件? 我在Windows中尝试了这个代码并且它可以工作,但它在Android中不起作用。
procedure ListFileDir(Path: string; FileList: TStrings);
var
SR: TSearchRec;
begin
if FindFirst(Path + '*.*', faAnyFile, SR) = 0 then
begin
repeat
if (SR.Attr <> faDirectory) then
begin
FileList.Add(SR.Name);
end;
until FindNext(SR) <> 0;
FindClose(SR);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ListFileDir('sdcard/1/', ListBox1.Items);
end;
答案 0 :(得分:3)
您的代码仅适用于Windows。对于跨平台开发,在处理文件和文件夹时应使用System.IOUtils
。
具体而言,TDirectory.GetFiles(Path)
uses
System.Types,
System.IOUtils;
procedure ListFileDir(Path: string; FileList: TStrings);
var
Files: TStringDynArray;
s: string;
begin
FileList.Clear;
Files := TDirectory.GetFiles(Path);
for s in Files do
FileList.Items.Add(s);
end;
答案 1 :(得分:0)
您的代码出于跨平台目的的问题不是您使用FindFirst
和朋友(TDirectory.GetFiles
只是对它们的一个薄包装),而是'*.*'
构造 - 您只需使用'*'
代替:
procedure ListFileDir(Path: string; FileList: TStrings);
const
AllFilesMask = {$IFDEF MSWINDOWS}'*.*'{$ELSE}'*'{$ENDIF};
var
SR: TSearchRec;
begin
if FindFirst(Path + AllFilesMask, faAnyFile, SR) = 0 then
try
repeat
if (SR.Attr <> faDirectory) then
begin
FileList.Add(SR.Name);
end;
until FindNext(SR) <> 0;
finally
FindClose(SR);
end;
end;