【发布时间】:2013-07-15 14:05:21
【问题描述】:
我在为将打开目录文件夹并递归删除其中的所有文件以便我可以依次删除文件夹本身的过程编写代码时遇到问题。我不会遇到递归过程的问题,但我似乎无法让 FindFirst/FindNext/FindClose 函数正常工作。下面的过程应该在当前目录中搜索任何类型的任何文件(但是我可能误用了字符串通配符;我在网上没有找到太多关于它们使用语法的信息)。
procedure TForm1.Button1Click(Sender: TObject);
var SR: TSearchRec;
begin
ShowMessage(GetCurrentDir);
if (FindFirst('\*.*',faAnyFile,SR)=0) then
begin
repeat
ShowMessage(SR.Name);
until FindNext(SR)<>0;
FindClose(SR);
end
else begin
ShowMessage('No matching files found');
end;
end;
现在看来,无论我输入什么文件名,该过程都找不到任何文件,并且总是返回“未找到匹配文件”消息。
【问题讨论】:
-
您是否尝试过在调用
FindFirst时明确说明路径?另外,你知道“当前”目录可以是任何东西,所以你要永久删除用户系统上的一个随机目录? -
@AndreasRejbrand - 在我使用的实际代码中,我使用 SetCurrentDir 函数在其上方定义了当前目录,但我省略了它,因为它很长而且对我的问题没有必要。我在程序开始时的消息中显示了当前目录,以便我可以看到我正在工作的目录。是的,我已经尝试过明确。我什至为我正在寻找的特定文件输入了一个字符串(即'C:\Program Files\Test.txt')
-
除非给出完全限定的路径,否则
FindFirstFileAPI function 仍然可能不起作用。也许它不关心当前的工作目录?无论如何,您是否尝试过简单地将\*.*替换为*.*? -
是的,我尝试了几种不同的字符串通配符迭代,以及拼写特定文件。
-
但是您的代码中没有其他错误... :( 在一个新的、空的、VCL 或命令行项目中尝试它,并硬编码路径
C:\WINDOWS\*.*(或任何它在您的系统上调用),您会看到它有效。
标签: delphi file-search findfirst