24

我正在使用delphi,当我执行openpicturedialog 时,我想要一个目录中所有文件的列表。

即,当执行打开对话框并从中选择一个文件时,我想要所选文件目录中所有文件的列表。

您甚至可以建议我从 Thank You的FileName属性中获取目录名称。TOpenDialog

4

6 回答 6

53

如果您使用 delphi 2010,那么您可以使用 tdirectory.getfiles 首先将 ioutils.pas 添加到 uses 子句,然后在事件处理程序中编写以下代码行(除了该事件处理程序中已有的代码)

uses IOUtils;

 var
    path : string;
begin
    for Path in TDirectory.GetFiles(OpenPictureDialog1.filename)  do
        Listbox1.Items.Add(Path);{assuming OpenPictureDialog1 is the name you gave to your OpenPictureDialog control}
end;
于 2010-06-12T06:41:55.660 回答
31

@Himadri,OpenPictureDialog 的主要目标不是选择目录,无论如何,如果您将此对话框用于其他目的,您可以尝试此代码。

Var
  Path    : String;
  SR      : TSearchRec;
  DirList : TStrings;
begin
  if OpenPictureDialog1.Execute then
  begin
    Path:=ExtractFileDir(OpenPictureDialog1.FileName); //Get the path of the selected file
    DirList:=TStringList.Create;
    try
          if FindFirst(Path + '*.*', faArchive, SR) = 0 then
          begin
            repeat
                DirList.Add(SR.Name); //Fill the list
            until FindNext(SR) <> 0;
            FindClose(SR);
          end;

     //do your stuff

    finally
     DirList.Free;
    end;
  end;

end;
于 2010-06-12T05:47:24.350 回答
3

更改 OpenPictureDialog 中的过滤器属性以包含所有文件:

All (*.*)

编辑:我认为您不能在 Open(Picture)Dialog 中选择目录,这肯定不是 OpenPictureDialog 的目的。

然后使用FindFirstFindNext获取此目录中的文件。

于 2010-06-12T05:21:17.157 回答
2

您可以使用 extractFilePath 函数来获取目录名称:

myPath := extractFilePath(FileName);

其中 FileName 是您通过 OpenDialog 选择的文件的名称。

于 2010-06-12T05:44:36.943 回答
1
if OpenPictureDialog1.Execute then  
  FileListBox1.Directory := extractFilePath(OpenPictureDialog1.FileName);

您还可以使用链接到 FileListBox 的 FilterComboBox 来过滤文件类型。

TFileListBox 和 TFilterComboBox 在“Win 3.1”下的工具面板中。Delphi 4 中有这些对象。

于 2019-08-02T20:48:43.563 回答
0

使用 System.IOUtils;

变种列表:TStringlist;var文件:字符串:='';enter code here var Path : string := IncludeTrailingPathDelimiter(Edit1.Text);

列表 := TStringList.Create; 尝试 TDirectory.GetFiles(Path) 中的 File 做 List.Add(File); // 最后将所有文件名添加到列表 FreeAndNil(Lista); 结尾;

于 2021-12-24T21:02:29.297 回答