将TSearchrec的字符串添加到备忘录

时间:2013-11-14 12:49:49

标签: string delphi delphi-xe3 memo

我想将所选文件夹中的文件添加到memobox或字符串列表中并显示结果。在这两种方式中,我都可以添加它们,但我无法在备忘录中显示文件夹中的文件,也无法在ShowMessage - 对话框中显示字符串列表中的文件。

function CountFilesInFolder(AFolder: String; AMask: String): Integer;
var 
  tmp1: TSearchRec;
  ergebnis: Integer;
  memo1: string;
  list : TStringList;
begin
  result := 0;
  if (AFolder <> '') then
  begin
    if AFolder[length(AFolder)] <> '\' then AFolder := AFolder + '\';
    ergebnis := FindFirst(AFolder + AMask, faArchive + faReadOnly + faHidden + faSysFile, tmp1);
      while ergebnis = 0 do
      begin
        Inc(result);
        ergebnis := FindNext(tmp1);
        while ((tmp1.Name = '|*_tif.tif')) and (ergebnis <> 0) do
        ergebnis := FindNext(tmp1);
      end;
       list.Add(tmp1.Name);
       FindClose(tmp1);
  end;
end;
谢谢你的时间,抱歉我的英语不好。

1 个答案:

答案 0 :(得分:1)

像这样的低级功能不应该直接将项添加到备忘录中。而是将TStrings(字符串列表的抽象)传递给函数并填充它:

function CountFilesInFolder(AFolder: String; AMask: String; FileNames: TStrings): Integer;
begin
// do your file enumeration
// for each file call FileNames.Add(FileName);
end;

由于备忘录的Lines属性也属于TStrings类型,因此您可以直接使用它:

CountFilesInFolder('D:\', '*.TXT', Memo1.Lines);

如果你想在字符串列表中包含文件名,通常的模式是这样的:

FileNames := TStringList.Create;
try
  CountFilesInFolder('D:\', '*.TXT', FileNames);
finally
  FileNames.Free;
end;

重要的是,调用者创建并销毁传递给TStringList的{​​{1}} - 这是Delphi中的一个重要原则。