2016-08-26 17 views
0

Inno Setupで特定のファイル拡張子を持つディレクトリのファイルをカウントしたかったのです。私は次のコードを書いた。Inno Setup指定されたファイル拡張子を持つディレクトリ内のファイル数を調べる

よろしく、

function AmountOfFilesInDir(const DirName, Extension: String): Integer; 
var 
    FilesFound: Integer; 
    ShouldBeCountedUppercase, ShouldBeCountedLowercase: Boolean; 
    FindRec: TFindRec; 
begin 
    FilesFound := 0; 
    if FindFirst(DirName, FindRec) then begin 
    try 
     repeat 
     if (StringChangeEx(FindRec.Name, Lowercase(Extension), Lowercase(Extension), True) = 0) then 
      ShouldBeCountedLowercase := False 
     else 
      ShouldBeCountedLowercase := True; 
     if (StringChangeEx(FindRec.Name, Uppercase(Extension), Uppercase(Extension), True) = 0) then 
      ShouldBeCountedUppercase := False 
     else 
      ShouldBeCountedUppercase := True; 
     if (FindRec.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0) 
      and ((ShouldBeCountedUppercase = True) or (ShouldBeCountedLowercase = True)) then begin 
      FilesFound := FilesFound + 1; 
     end; 
     until not FindNext(FindRec); 
    finally 
     FindClose(FindRec); 
    end; 
    end; 
    Result := FilesFound; 
end; 

および使用方法の例は指定できます

Log(IntToStr(AmountOfFilesInDir(ExpandConstant('{sys}\*'), '.exe'))); 

私はそれが少し長く見えるよう、それはより専門的に見えるように、この関数のコードの行を削減したいです。私はこの機能に失敗することなく、どうすればいいのか知る必要があります。

ありがとうございます。

答えて

1

FindFirst functionは、独自のワイルドカード(拡張子)に基づいてファイルを選択することができます。

function AmountOfFiles(PathWithMask: string): Integer; 
var 
    FindRec: TFindRec; 
begin 
    Result := 0; 
    if FindFirst(PathWithMask, FindRec) then 
    begin 
    try 
     repeat 
     Inc(Result); 
     until not FindNext(FindRec); 
    finally 
     FindClose(FindRec); 
    end; 
    end; 
end; 

はそれが好きで使用してください:

Log(IntToStr(AmountOfFiles(ExpandConstant('{sys}\*.exe')))); 
+0

はありがとうございました........! ....あなたはそれを短縮しました......... – GTAVLover

関連する問題