1

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

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;

谢谢你的时间,对不起我的英语不好。

4

1 回答 1

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传入CountFilesInFolder的 - Delphi 中的一个重要原则。

于 2013-11-14T13:25:19.573 回答