使用delphi列出字符串网格中目录中的所有文件

Posted

技术标签:

【中文标题】使用delphi列出字符串网格中目录中的所有文件【英文标题】:list all files from a directory in a string grid with delphi 【发布时间】:2012-07-14 10:29:36 【问题描述】:

我正在使用 Delphi 7,我想在字符串网格中列出给定目录中的所有文件(每行一个文件,全部在 1 列中)。我已经搜索了大约一个小时,但找不到任何有关如何执行此操作的示例,因此您可以提供任何帮助,我们将不胜感激。

【问题讨论】:

【参考方案1】:

这将使用指定文件夹中的所有文件填充TStrings 后代(例如TStringListTMemo.Lihes 等):

function  GetFiles(const StartDir: String; const List: TStrings): Boolean;
var
  SRec: TSearchRec;
  Res: Integer;
begin
  if not Assigned(List) then
  begin
    Result := False;
    Exit;
  end;
  Res := FindFirst(StartDir + '*.*', faAnyfile, SRec );
  if Res = 0 then
  try
    while res = 0 do
    begin
      if (SRec.Attr and faDirectory <> faDirectory) then
        // If you want filename only, remove "StartDir +" 
        // from next line
        List.Add( StartDir + SRec.Name );
      Res := FindNext(SRec);
    end;
  finally
    FindClose(SRec)
  end;
  Result := (List.Count > 0);
end;

像这样使用它来填充您的TStringGrid(下面代码中的Grid - 我添加了代码以根据最长文件名的长度自动调整列的大小):

var
  SL: TStringList;
  i: Integer;
  MaxWidth, CurrWidth: Integer;
const
  Padding = 10;
begin
  SL := TStringList.Create;
  try
    if GetFiles('C:\Temp\', SL) then
    begin
      MaxWidth := Grid.ColWidths[0];
      for i := 0 to SL.Count - 1 do
      begin
        CurrWidth := Grid.Canvas.TextWidth(SL[i]);
        if CurrWidth > MaxWidth then
          MaxWidth := CurrWidth;
        // Populates first column in stringgrid.
        Grid.RowCount := Grid.RowCount + 1;
        Grid.Cells[0, Grid.RowCount - 1] := SL[i];
      end;
      Grid.ColWidths[0] := MaxWidth + Padding;
    end;
  finally
    SL.Free;
  end;
end;

请注意,此代码要求路径在文件夹名称后包含尾部反斜杠;您可以轻松修改它以在需要时自动添加它,或者接受文件夹名称和文件掩码以仅包含某些文件。

【讨论】:

这似乎列出了文件夹而不是文件,或者我做错了什么。 你错过了我的编辑。 :-) 将= faDirectory 更改为&lt;&gt; faDirectory【参考方案2】:

    使用SysUtil.FindFirst/FindNext/FindClose获取文件

    只需将字符串插入所需的行/列。根据需要增加“RowCount”:

    Add Rows

    Insert/Delete rows

    Lazarus String Grids reference (good info, but significant differences from Delphi)

【讨论】:

以上是关于使用delphi列出字符串网格中目录中的所有文件的主要内容,如果未能解决你的问题,请参考以下文章

java-File类-字节流

FindFirst 返回英文文件夹 - Delphi

如何查询 Delphi 组件面板?

在Delphi中使用系统对应文件类型的图标

如何用Delphi实现子目录级的文件查询

delphi中,如何读取一个目录中的所有文件?在线等……