【发布时间】:2012-04-23 05:53:21
【问题描述】:
来自冰岛的问候!
首先,我用谷歌和这里都搜索过,没有结果。
我在 Delphi 中写作,并且在 Delphi 方面有几年的经验(在 Pascal 方面超过 30 年)
这些年来,我构建了各种文件实用程序的程序,并在几乎所有此类应用程序中使用了 FindFirst 和 FindNext 功能。今天我正在使用我编写的旧文件实用程序,发现它不能 100% 工作
在目录名称变得有点奇怪之前没关系,即名称内部有几个句点。故事是我正在安装 Wamp,那里的一些文件夹用这种奇怪的方法命名。
As: "c:\wamp\apps\phpmyadmin3.4.5"
"c:\wamp\apps\sqlbuddy1.3.3"
"c:\wamp\apps\webgrind1.0 etc"
当我进行调试时,我发现 Findnext 刚刚返回错误 18,这与 FindNext 在找不到更多文件时返回的错误相同。
我尝试过 FindFirstFile 和 FindNextFile,结果相同。我正在考虑尝试 API FindNextFileEx,如果这与长文件名有关,但不是那么乐观..
我还注意到这些文件夹中的属性不是 16 (hex10) 而是 8208 (8192+16),但它与这个问题没有任何关系,例如我可以屏蔽 (AND) attr 与 $00FF 等。
PROCEDURE TForm_Leit.Finna_Dir (Str_InnDir : STRING);
VAR
S_Rec1 : TSearchRec;
Bo_Buid : BOOLEAN;
BEGIN
.
.
.
//Find Dir part
IF (FindFirst (Str_Inndir+'\*.', faDirectory, S_Rec1) = 0) THEN
REPEAT
Bo_Buid := FALSE;
IF ((S_Rec1.Name = '.') OR (S_Rec1.Name = '..')) THEN
REPEAT
Bo_Buid := FindNext (S_Rec1) <> 0;
UNTIL NOT((S_Rec1.Name = '.') OR (S_Rec1.Name = '..')) OR (Bo_BUid);
IF NOT(Bo_Buid) THEN
Finna_Dir (Str_Inndir+'\'+S_Rec1.Name); //Recursion
UNTIL (FindNext (S_Rec1) <> 0);
END;
【问题讨论】:
-
这是一个需要代码的问题。单击编辑链接并在问题中添加一些代码。
-
为了避免泄漏,FindClose(S_Rec1);必须添加声明。参见示例:FindFirst_(Delphi).
-
@user - 您介意就我发布的答案提供一些反馈吗?谢谢..
-
@LU RD 是的..我在发布代码时确实注意到了..我通常在我的商业应用程序中使用 Findclose,这些实用程序很旧而且通常写得不好..但使用仅限于仅限我,因为我不分发 file utilite 的游戏。
-
@Sertac Akyuz .. 是的,我会的,你的解决方案在我脑海里敲响了警钟,我会试试这个,我很乐观你会发现......因为搜索字符串仅限于名称没有时期..哇!让我测试一下并尽快给你反馈。
标签: delphi