Page 1 of 1

how to get the folder size using ant script

Posted: 2013-07-13 12:06:36
by jete2011
i copied a folder from src to destination.but i need to verify whether the size
of the folder from both source and destination are equal

Posted: 2013-07-13 17:42:49
by soulsnake
Hi jete2011,

There is no native fonction to do this but you can use the function GetFolderSize below to do what you need.
Just copy it in your script as it is done in example below.

Code: Select all

program ShowFolderSize;
var
  size: Double;

  function GetFolderSize(path: string): double;
  var
    s: string;
    lines: TStringList;
    values: TStringListEx;
    i: integer;
  begin
    result := 0;
    path := IncludeTrailingPathDelimiter(path);
    lines := TStringList.Create;
    values := TStringListEx.Create;
    values.Delimiter := #9;
    if DirectoryExists(path) then
    begin
      // List current folder
      s := ListDirectory(path, '*');
      // Extract lines
      lines.Text := s;
      // For all lines
      for i := 0 to lines.Count-1 do
      begin
        // Extract values of line (name, size, datetime, "D" if directory)
        values.DelimitedCSVText := lines.GetString(i);
        while values.Count < 4 do
          values.Add('');
        if (values.GetString(0) <> '') and
           (values.GetString(0) <> '.') and
           (values.GetString(0) <> '..') then
        begin
          // If it is a folder, we compute the size of this folder recursively
          if values.GetString(3) = 'D' then
            result := result + GetFolderSize(path + values.GetString(0))
          // Else we add the filesize to result
          else
          begin
            // We use function GetFileSize to get good filesize because the size returned
            // by function ListDirectory is only good for small files < 2 147 483 648 bytes
            if FileExists(path + values.GetString(0)) then
              result := result + GetFileSize(path + values.GetString(0))
            else
              result := result + StrToFloat(values.GetString(1));
          end;
        end;
      end;
    end;
    lines.Free;
    values.Free;
  end;
begin
  // Example
  size := GetFolderSize('C:\Movies\');
  ShowMessage(FloatToStr(size) + ' bytes');
end.
Soulsnake.