Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Определить размер всех файлов


Автор: microo10 10.2.2013, 18:56
У меня есть ListBox,в каждой строке указан путь к файлу...мне нужно определить размер всех файлов в мегабайтах...помогите пожалуйста smile
И еще вопросик: вообще у меня процедура рекурсивного обход директории, она получает результаты удовлетворяющие критерию поиска и выводит их в ListBox. Я пытался в процедуру добавить получение размеров файлов через SearchRec.Size,но она мне выводила размер всех файлов,а не тех которые удовлетворяют критерию поиска...может все таки можно в процедуре данное действие выполнить?
Процедура:
Код

rocedure FindFiles(StartFolder, Mask: string; List: TStrings;
  ScanSubFolders: Boolean = True);
var
  SearchRec: TSearchRec;
  FindResult: Integer;

begin
  List.BeginUpdate;
  try
    StartFolder := IncludeTrailingBackslash(StartFolder);
    FindResult := FindFirst(StartFolder + '*.*', faAnyFile, SearchRec);
    try
      while FindResult = 0 do
        with SearchRec do
        begin
          Application.ProcessMessages();
          if (Attr and faDirectory) <> 0 then
          begin
            if ScanSubFolders and (Name <> '.') and (Name <> '..') then
              FindFiles(StartFolder + Name, Mask, List, ScanSubFolders);
          end
          else
          begin
            if MatchesMask(Name, Mask) then
              List.Add(StartFolder + Name);
              Size_file:=size_file+SearchRec.Size;
          end;
          FindResult := FindNext(SearchRec);
        end;
    finally
      FindClose(SearchRec);
    end;
  finally
    List.EndUpdate;
  end;
    end;

Size_file - глобальная переменная,потом по нажатию кнопки выводится значение в label...но опять же она(процедура) выводит размер всех файлов...помогите пожалуйста :(  

Автор: microo10 10.2.2013, 19:49
Пока ждал ответа,сам накалякал  smile 
Код

function GetFileSize(FileName: String): Integer;
var
  FS: TFileStream;
begin
  try
    FS := TFileStream.Create(Filename, fmOpenRead);
  except
    Result := -1;
  end;
  if Result <> -1 then Result := FS.Size;
  FS.Free;
end;

Код

procedure FindFiles(StartFolder, Mask: string; List: TStrings;
  ScanSubFolders: Boolean = True);
var
  SearchRec: TSearchRec;
  FindResult,Size: Integer;
  fileResult: string;

begin
  List.BeginUpdate;
  try
    StartFolder := IncludeTrailingBackslash(StartFolder);
    FindResult := FindFirst(StartFolder + '*.*', faAnyFile, SearchRec);
    try
      while FindResult = 0 do
        with SearchRec do
        begin
          Application.ProcessMessages();
          if (Attr and faDirectory) <> 0 then
          begin
            if ScanSubFolders and (Name <> '.') and (Name <> '..') then
              FindFiles(StartFolder + Name, Mask, List, ScanSubFolders);
          end
          else
          begin
            if MatchesMask(Name, Mask) then
             fileResult:=(StartFolder + Name);
              List.Add(fileResult);
              Size_file:=size_file+GetFileSize(fileResult);
          end;
          FindResult := FindNext(SearchRec);
        end;
    finally
      FindClose(SearchRec);
    end;
  finally
    List.EndUpdate;
  end;
    end;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)