指定したフォルダー以下のサイズを取得するには

解決


辰男  2007-02-08 06:14:45  No: 24826

指定したフォルダー以下について、サブフォルダ以下も含めた、ファイル数をフォルダーごとに得たいと思いますが解決できません。
各フォルダーごとのファイル数を得るまでの知識はあります。

パス名/このフォルダのファイル数/このフォルダ以下も含めたファイル数
c:\Test/10/28           10+5+13=28
c:\Test\subF1/5/5
c:\Test\SubF2/6/13      6+7=13
c:\Test\SubF2\subF22/7/7


さどやま  URL  2007-02-08 19:18:56  No: 24827

再帰呼び出しという手法を使います。

unit GetFilesCountMain;

interface

uses  Windows, ....

type
  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private 宣言 }
    Count: Integer;
    procedure GetFilesCount(const Path: String);
  public
    { Public 宣言 }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  Folder: String;
begin
  Folder := Get対象FolderName;

  Count := 0;
  GetFilesCount(Folder);
  Label1.Caption := IntToStr(Count);
end;

procedure TForm1.GetFilesCount(const Path: String);
var
  Res: Integer;
  SearchRec: TSearchRec;
  Attri: Integer;
  S: String;
begin
  // Pathの最後が'\'でない場合、'\'を加える = 重要
  // IncludeTrailingPathDelimiter()がないVersionでは
  // IncludeTrailingBackslash()を使用
  // それもないversionでは、
  // if not IsPathDelimiter() then  S := Path + '\'
  S := IncludeTrailingPathDelimiter(Path);

  Res := FindFirst(S + '*.*', faAnyFile, SearchRec);
  try
    try
      while Res = 0 do
      begin
        Attri := (SearchRec.Attr) and faDirectory;
        if  (Attri <> faDirectory) then  Inc(Count)
        else
          if (SearchRec.Name <> '.') and (SearchRec.Name <> '..') then
            GetFilesCount(S + SearchRec.Name);  // 再帰呼び出し
        Res := FindNext(SearchRec);
      end;
    except
      Showmessage('ファイル数の取得に失敗しました。');
    end;
  finally
    FindClose(SearchRec);
  end;
end;

end.


辰男  2007-02-10 06:00:36  No: 24828

どうもありがとうございました。
お示しいただいたのは、合計のファイル数を得る方法かと思いますが、私が今やりたいのはフォルダごとの情報をリスト出力できなくて困っています。
今一度、ご教授をお願いします。


さどやま  2007-02-10 06:56:20  No: 24829

> フォルダごとの情報をリスト出力できなくて困っています。

例えば
1.上記コードを改良してTStringList などへフォルダだけの一覧表を作ります。
2.上記コードと一覧表を利用してフォルダごとのデータを取得します。


辰男  2007-02-10 14:58:44  No: 24830

どうもありがとうございました。
教えていただいた方法でやってみます。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加