アイスランドからこんにちは!
まず、グーグルとここの両方で検索しましたが、結果はありませんでした。
私は 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) であることに気付きましたが、たとえば属性を $00 でマスク (AND) できるため、この問題とは何の関係もありません。 FFなど
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;