我想用文件夹中的.DBF文件的名称填充此ListBox。
例如:我的文件夹C:/Kassendaten
包含IArtikel.dbf
,IBediener.dbf
,等等
我需要这个让用户选择一个dbf文件。
我是Delphi的新手,不知道我是怎么做的。
答案 0 :(得分:5)
试试这个:
procedure FillFiles(Strings: TStrings; const strDirectory, strExtension: string);
var
sr: TSearchRec;
begin
if FindFirst(strDirectory + '\*.' + strExtension, faAnyFile, sr) = 0 then
try
Strings.BeginUpdate;
try
Strings.Clear;
repeat
Strings.Add(sr.Name);
until FindNext(sr) <> 0;
finally
Strings.EndUpdate;
end;
finally
FindClose(sr);
end;
end;
procedure TForm1.btnTestClick(Sender: TObject);
begin
FillFiles(lstFiles.Items, 'C:\', 'dbf');
end;
答案 1 :(得分:4)
使用IOUtils
单元中可用的功能以及Types
单元中声明的阵列。将这两个单元添加到implementation
用户子句中,然后这样的操作应该起作用:
var
aFiles: TStringDynArray;
sFile: String;
begin
aFiles := TDirectory.GetFiles('C:\Kassendaten', '*.dbf');
ListBox1.Items.BeginUpdate;
try
for sFile in aFiles do
ListBox1.Items.Add(sFile);
finally
ListBox1.Items.EndUpdate;
end;
end;
答案 2 :(得分:3)
单元IOUTILS.pas有一个类TDirectory,其方法是在字符串数组中获取目录列表。 TListbox有一个属性Items,表示列表框中行的字符串。
那应该对你有帮助。
答案 3 :(得分:1)
这是一个通用函数GetFileNames
,我总是将其用于类似的任务:
//Returns a list of all the filenames matching the searchpath criteria.
//Note: Free the returned TStringList when finished with it.
function GetFileNames(const SearchPath : String): TStringList;
var
SearchRec:TSearchRec;
Path: string;
begin
result := TStringList.Create;
try
// Extract directory path
path := ExtractFilePath(SearchPath);
if not DirectoryExists(Path) then exit;
// Find files
if FindFirst(SearchPath,faAnyFile,SearchRec) = 0 then
try
repeat
result.Add(Path+SearchRec.Name);
until FindNext(SearchRec) <> 0;
finally
FindClose(SearchRec);
end;
except
result.Free;
raise;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Edit1.Text := 'C:\MyFavoriteDir\*.dpr'
end;
procedure TForm1.Button1Click(Sender: TObject);
var
FileNames : TStrings;
begin
FileNames := GetFileNames(Edit1.Text);
try
ListBox1.items.Assign(FileNames);
finally
FreeAndNil(FileNames);
end;
end;
答案 4 :(得分:1)
试试这个:
{code}
var s: string;
begin
s := 'c:\windows\*.bmp'#0;
ListBox1.Perform(LB_DIR, DDL_READWRITE, LongInt(@s[1]));
end;
{code