【问题标题】:Delphi - how to get a list of all files of directoryDelphi - 如何获取目录中所有文件的列表
【发布时间】:2011-03-02 22:29:29
【问题描述】:

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

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

您甚至可以建议我从FileNameTOpenDialog 属性中获取目录名称
谢谢。

【问题讨论】:

    标签: delphi opendialog


    【解决方案1】:

    更改 OpenPictureDialog 中的 filter 属性以包含所有文件:

    All (*.*)
    

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

    然后使用FindFirstFindNext 来获取这个目录下的文件。

    【讨论】:

    • 我不是在选择一个目录而是一个文件..我想要所选文件的父目录的其他文件列表..仔细阅读问题...
    • 在这种情况下,CaldonCZE 有答案。
    【解决方案2】:

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

    myPath := extractFilePath(FileName);
    

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

    【讨论】:

      【解决方案3】:

      @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;
      

      【讨论】:

      • 好的。谢谢我明白了。你的回答对我有帮助。
      • 我认为您的代码需要尝试最终保护 FindFirst/FindClose(SR)。
      • 发现了一个需要替换的错误 if FindFirst('.', faArchive, SR) = 0 then with if FindFirst(Path+'. ', faArchive, SR) = 0 然后因为它不看路径
      • 如何按文件日期对列表进行排序?
      • FindFirst 已经过时了。为什么不 TDirectory.GetFiles ?
      【解决方案4】:

      如果你使用 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;
      

      【讨论】:

      • 不错的选择,但我没有使用 delphi 2010... :-(
      • 别忘了包括:使用 IOUtils;
      • TDirectory.GetFiles 接受带有文件掩码的附加参数(第一个是文件夹),如果可以获取文件,例如具有特定扩展名或匹配文件名中的特定模式。
      • 我正在使用 Delphi XE4(仍然!)并且 TDirectory 可用。
      【解决方案5】:
      if OpenPictureDialog1.Execute then  
        FileListBox1.Directory := extractFilePath(OpenPictureDialog1.FileName);
      

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

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

      【讨论】:

        【解决方案6】:

        使用 System.IOUtils;

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

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

        【讨论】:

        • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
        猜你喜欢
        • 1970-01-01
        • 2010-12-01
        • 2010-11-30
        • 2014-09-15
        • 2011-04-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多