Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Obter tamanho de diretorio


luizf

Pergunta

Como posso obter o tamanho de diretorios em delphi?

Há alguma função pronta? Pra tamanho de arquivo, eu achei, mas pra tamanho de diretorio, não.

Mas uma coisa, como posso verificar se um Path é um arquivo qualquer ou um diretorio.

Supondo que tenho um Memo ao arrastar (DragDrop) o arquivo ou pasta em cima do Memo, ira ser pego o Path e preciso que adicione em um outro memo ou edit qualquer a indicação se é uma pasta ou se é um arquivo.

T+

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Deletei o anterior ... vai um exemplo completo

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Button2: TButton;
    procedure Find (Str: string);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  TotalSize: Integer;
implementation

{$R *.DFM}

uses FileCtrl;

procedure TForm1.Find(Str: string); 
var 
  MySearch: TSearchRec;
  FindResult: Integer;
begin 
  FindResult:=FindFirst(Str+'\*.*',
                        faArchive+faHidden+ 
                        faAnyFile+faVolumeID+ 
                        faSysFile+faReadOnly+faDirectory,
                        MySearch); 
  while FindResult=0 do 
  begin
    if (MySearch.Attr=faDirectory) and 
       (MySearch.Name<>'.') and 
       (MySearch.Name<>'..') then
      Find(Str+'\'+MySearch.Name) 
    else 
      TotalSize:=TotalSize+MySearch.Size;
    FindResult:=FindNext(MySearch); 
  end; 
  FindClose(MySearch);
end; 


procedure TForm1.Button1Click(Sender: TObject); 
var 
  St: string;
begin
  St:='c:\';
  if SelectDirectory(St, [], 0) then
    Edit1.Text:=St;
end;


procedure TForm1.Button2Click(Sender: TObject); 
begin
  TotalSize:=0;
  if Length(Edit1.Text)>0 then
  begin
    Find(Edit1.Text);
    Label1.Caption:='Total size = '+formatfloat(',0.00',(TotalSize)) + ' bytes';
    Label2.Caption:='Total size = '+formatfloat(',0.00',(TotalSize / 1024)) + ' Mb';
  end;
end;

end.

OBS: clique no Button1 para procurar o diretorio ou pasta

o caminho do diretorio ou pasta será colocado no edit1

ao clicar o Button2 voce verá o resultado no label1 em bytes e no label2 em Mb

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Só umas coisinhas que alterei.

No Label2 em:

Label1.Caption:='Total size = '+formatfloat(',0.00',(TotalSize)) + ' bytes';

Label2.Caption:='Total size = '+formatfloat(',0.00',(TotalSize / 1024)) + ' Mb';

Não é Mb, é Kb, mas tudo bem.

Então acrescentei, para efeito de teste.

Label1.Caption:='Total size = '+formatfloat(',0.00',(TotalSize)) + ' bytes';
    Label2.Caption:='Total size = '+formatfloat(',0.00',(TotalSize / 1024)) + ' Kb';
    Label3.Caption:='Total size = '+formatfloat(',0.00',(TotalSize / 1024 / 1024)) + ' Mb';
    Label4.Caption:='Total size = '+formatfloat(',0.00',(TotalSize / 1024 / 1024 / 1024)) + ' Gb';
O resultado foi: Total size = -1.061.822.231,00 bytes Total size = -1.036.935,77 Kb Total size = -1.012,63 Mb Total size = -0,99 Gb Algo saiu errado, tamanho negativo, e o diretorio que usei para teste tem 99,0 GB. Então lembrei de uma papo a poucos dias em um outro tópico, e troquei o Integer por Extended, ficando assim:
var
  Form1: TForm1;
  TotalSize: Extended;

Com os Labels do mesmo jeito, o resultado foi:

Total size = 106.312.360.169,00 bytes

Total size = 103.820.664,23 Kb

Total size = 101.387,37 Mb

Total size = 99,01 Gb

Maravilha.

Encontrei um programa que tem um exemplo de como pegar o tamanho da pasta, mas pega de um componente visual, e pretendo colocar o código acima em DragDrop. Mas de qualquer forma se puder dar uma olhada.

http://delphi.about.com/library/weekly/aa081605a.htm

http://delphi.about.com/library/weekly/code/foldersize.zip://http://delphi.about.com/library/wee...dersize.zip

Mais uma coisa, com disse vou usar em um DragDrop, ao extrair o Path, como posso verificar se um arquivo ou uma pasta?

Quanto ao tamanho do diretório, tudo Ok, obrigado.

T+

Editado por luizf
Link para o comentário
Compartilhar em outros sites

  • 0

Bom, tentei fazer desse jeito, sobre as extensões, mas lembrei, que as vezes em um download e outro, e outras coisas, tem arquivos sem extensão, quando se tem noção do que é voce pode renomear e colocar a extensão correta, numa boa, já acontenceu comigo varias vezer, principalmente com arquivos da faculdade que mandam por email.

O quero dizer é o seguinte, como o arquivo em questão não tem extensão, o programa consideraria com pasta e iria causar um erro, certo?

Mas com sua dica, acabei tendo uma ideia.

Supondo que é um Memo que vai receber o que eu arrastar com o DragDrop.

var
  I: Integer;
  Tipo: String;
  TamanhoDir: Extended;
begin
  TotalSizeDir:= 0;
  TamanhoDir:= 0;

  for I:= 0 to Memo1.Lines.Count -1 do
  begin

    if FileExists(Memo1.Lines.Strings[I]) then
    begin // Se tipo for arquivo
      TamanhoDir:= TamArquivo(Memo1.Lines.Strings[I]);
      Tipo:= 'Arquivo';
    end

    else
      if DirectoryExists(Memo1.Lines.Strings[I]) then
      begin // Se tipo for pasta
        Find(Memo1.Lines.Strings[I]);
        TamanhoDir:= TotalSize;      
        Tipo:= 'Pasta';
      end
      else // se não encontrar a pasta ou arquivo, então tipo vazio
       Tipo:= '';


    if Tipo <> '' then
    begin
      .....
      Grava TamanhoDir;
      Grava Tipo;
      etc... 
      .....
    end;

end;

Bom, comigo funcionou certinho, se no Memo tinha um arquivo com ou sem extensão, fazia o que era pra fazer com arquivos, pegar tamanho e outros, o mesmo para pasta, e tinha um Path com com nome invalido ou uma linha vazia, não fazia nada.

O que acha, por mim caso encerrado.

Obrigado pela ajuda.

(Resolvido)

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...