Delphi 如何使FindFirst查找当前目录中的文件?

Delphi 如何使FindFirst查找当前目录中的文件?,delphi,file-search,findfirst,Delphi,File Search,Findfirst,我在为一个过程编写代码时遇到了问题,该过程将打开一个目录文件夹并递归删除其中的所有文件,这样我就可以依次删除文件夹本身。递归过程不会有问题,但我似乎无法使FindFirst/FindNext/FindClose函数正常工作。下面的过程应该在当前目录中搜索任何类型的文件(但是我可能误用了字符串通配符;我在网上没有找到太多关于它们使用语法的信息) procedure TForm1.按钮1点击(发送方:TObject); var SR:TSearchRec; 开始 ShowMessage(GetCur

我在为一个过程编写代码时遇到了问题,该过程将打开一个目录文件夹并递归删除其中的所有文件,这样我就可以依次删除文件夹本身。递归过程不会有问题,但我似乎无法使FindFirst/FindNext/FindClose函数正常工作。下面的过程应该在当前目录中搜索任何类型的文件(但是我可能误用了字符串通配符;我在网上没有找到太多关于它们使用语法的信息)

procedure TForm1.按钮1点击(发送方:TObject);
var SR:TSearchRec;
开始
ShowMessage(GetCurrentDir);
如果(FindFirst('\*.*',faAnyFile,SR)=0,则
开始
重复
ShowMessage(SR.Name);
直到FindNext(SR)0;
FindClose(SR);
终止
否则开始
ShowMessage('未找到匹配的文件');
终止
终止

现在看来,无论我为文件名输入什么,该过程都不会找到任何文件,并且总是返回“找不到匹配的文件”消息。

路径
“\*.*”
与当前工作目录的驱动器根目录相关。您可能想将
GetCurrentDir+'\*'
传递给
FindFirst
。或者更好,
TPath.Combine(GetCurrentDir,'*')

例如,如果您将适当的路径传递给
FindFirst
,此程序将演示您的代码是否正常工作

program FindFirstDemo;

{$APPTYPE CONSOLE}

uses
  SysUtils, IOUtils;

var
  SR: TSearchRec;

begin
  Writeln(GetCurrentDir);
  if FindFirst(TPath.Combine(GetCurrentDir, '*'),faAnyFile,SR)=0 then
  begin
    repeat
      Writeln(SR.Name);
    until FindNext(SR)<>0;
    FindClose(SR);
  end;
  Readln;
end.
程序FindFirstDemo;
{$APPTYPE控制台}
使用
SysUtils,IOUtils;
变量
SR:TSearchRec;
开始
Writeln(GetCurrentDir);
如果FindFirst(TPath.Combine(GetCurrentDir,'*')、faAnyFile、SR)=0,则
开始
重复
书面(高级姓名);
直到FindNext(SR)0;
FindClose(SR);
终止
Readln;
终止

在调用
FindFirst
时,您是否尝试明确说明路径?此外,您知道“当前”目录可以是任何内容,因此您将要永久删除用户系统上的随机目录?@AndreasRejbrand-在我使用的实际代码中,我使用SetCurrentDir函数在其上方定义了当前目录,但我忽略了这一点,因为它相当长,对我的问题来说不是必要的。在程序开始时,我会在一条消息中显示当前目录,这样我就可以看到我正在使用的目录。是的,我尝试过直言不讳。我甚至为我正在查找的特定文件(即“C:\Program Files\Test.txt”)输入了一个字符串。除非给出完全限定的路径,否则仍然可能无法工作。也许它不关心当前的工作目录?在任何情况下,您是否尝试将
\*.*.
替换为
*.*.
?是的,我尝试了几个不同的字符串通配符迭代,以及拼写特定文件。但您的代码中没有其他错误…:(在一个新的、空的、VCL或命令行项目中尝试,并硬编码路径
C:\WINDOWS\*.*
(或系统上调用的任何内容),您将看到它是有效的。这仍然找不到任何文件。作为对您的其他评论的回应,我不确定这是什么版本的Delphi,我正在使用一个名为Praxis的声学测量系统,它允许您编写自己的脚本,使程序能够运行(理想情况下)不管你喜欢它做什么。但是,脚本设计器使用Delphi,到目前为止,我在编码方面没有遇到任何问题。而且我以前没有使用IOUtils,我假设FindFirst函数在SysUtils单元下?更详细地说,FileSearch函数对我来说是成功的,但该函数只有在我我正在搜索特定文件。我正在寻找一个过程,该过程将为我提供指定文件夹中任何文件的名称。我没有回答吗?此回答中的代码列出当前目录中的所有对象。如果我复制此代码并将其粘贴到脚本中,我将不会得到任何输出返回。因此,不知何故,它对您有效,但对我无效:/the答案中的代码是一个完整的程序。创建一个新的控制台应用程序。将生成的.dpr文件的全部内容替换为此处的代码,您将获得输出。
program FindFirstDemo;

{$APPTYPE CONSOLE}

uses
  SysUtils, IOUtils;

var
  SR: TSearchRec;

begin
  Writeln(GetCurrentDir);
  if FindFirst(TPath.Combine(GetCurrentDir, '*'),faAnyFile,SR)=0 then
  begin
    repeat
      Writeln(SR.Name);
    until FindNext(SR)<>0;
    FindClose(SR);
  end;
  Readln;
end.