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

(Resolvido) Tamanho de pasta


robinhocne

Pergunta

Estou usando essa função para retornar o tamanho de um diretório:

function DirSize(Dir:string):integer;
{Retorna o tamanho de um diretório}
var
  SearchRec : TSearchRec;
  Separator : string;
  DirBytes : integer;
begin

  DirBytes := 0;
  if Copy(Dir,Length(Dir),1)='\' then
  begin
  Separator := '';
  end
  else
  begin
  Separator := '\';
  end;
  if FindFirst(Dir+Separator+'*.*',faAnyFile,SearchRec) = 0 then
  begin
  if FileExists(Dir+Separator+SearchRec.Name) then
  begin
  DirBytes := DirBytes + SearchRec.Size;
  {Memo1.Lines.Add(Dir+Separator+SearchRec.Name);}
  end
  else if DirectoryExists(Dir+Separator+SearchRec.Name) then
  begin
  if (SearchRec.Name<>'.') and (SearchRec.Name<>'..') then
  begin
  DirSize(Dir+Separator+SearchRec.Name);
  end;
  end;
  while FindNext(SearchRec) = 0 do
  begin
  if FileExists(Dir+Separator+SearchRec.Name) then
  begin
  DirBytes := DirBytes + SearchRec.Size;
  {Memo1.Lines.Add(Dir+Separator+SearchRec.Name);}
  end
  else if DirectoryExists(Dir+Separator+SearchRec.Name) then
  begin
  if (SearchRec.Name<>'.') and (SearchRec.Name<>'..') then
  begin
  DirSize(Dir+Separator+SearchRec.Name);
  end;
  end;
  end;
  end;
  FindClose(SearchRec);
end;
em um ShellTreeView eu listo as pastas e ao clica duas vezes eu jogo o Nome da pasta e caminho para uma tabela temporária e apresento em um Dbgrid:
procedure TFrmConfPastas.TrePasDblClick(Sender: TObject);
begin

  if not TblArq.Active then
      TblArq.Active := true;

  TblArq.Insert;
  TblArqPasta.AsString        := TrePas.Selected.Text;
  TblArqCaminho.AsString   := TrePas.Path;
  TblArqTamanho.AsCurrency := DirSize(TrePas.Path);
  TblArq.Post;

end;

Mas no campo TblArqTamanho sempre traz o mesmo valor da primeira que eu cliquei e acho que também o resultado retornado não está certo....

alguém pode me ajudar ?

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

11 respostass a esta questão

Posts Recomendados

  • 0

está dando vários erros:

[Warning] FSisBackup.pas(67): Unit 'FileCtrl' is specific to a platform
[Warning] FSisBackup.pas(112): For loop control variable must be simple local variable
[Warning] FSisBackup.pas(276): Symbol 'faArchive' is specific to a platform
[Warning] FSisBackup.pas(276): Symbol 'faHidden' is specific to a platform
[Warning] FSisBackup.pas(277): Symbol 'faVolumeID' is specific to a platform
[Warning] FSisBackup.pas(278): Symbol 'faSysFile' is specific to a platform
[Error] FSisBackup.pas(278): Incompatible types
[Fatal Error] SisBackup.dpr(9): Could not compile used unit 'FSisBackup.pas'

Link para o comentário
Compartilhar em outros sites

  • 0

o exemplo que te passei no link, funciona perfeitamente, dando a voce a informação do tamanho da pasta

quanto aos seus erros:

warning é apenas um aviso, não sendo necessariamente um erro

[Warning] FSisBackup.pas (67): Unit 'FileCtrl' é específico para uma plataforma

[Warning] FSisBackup.pas (112): Para a variável de controle de loop deve ser variável local simples

[Warning] FSisBackup.pas (276): Symbol "faArchive ' é específico para uma plataforma

[Warning] FSisBackup.pas (276): Symbol "faHidden ' é específico para uma plataforma

[Warning] FSisBackup.pas (277): Symbol "faVolumeID 'l é específico para uma plataforma

[Warning] FSisBackup.pas (278): Symbol "faSysFile ' é específico para uma plataforma

[Erro] FSisBackup.pas (278): tipos incompatíveis

[Erro Fatal] SisBackup.dpr (9): Não foi possível compilar unidade usada 'FSisBackup.pas'

entenda-se plataforma, como um comando especifico para uma determinada versão do delphi

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
o exemplo que te passei no link, funciona perfeitamente, dando a voce a informação do tamanho da pasta

quanto aos seus erros:

warning é apenas um aviso, não sendo necessariamente um erro

[Warning] FSisBackup.pas (67): Unit 'FileCtrl' é específico para uma plataforma

[Warning] FSisBackup.pas (112): Para a variável de controle de loop deve ser variável local simples

[Warning] FSisBackup.pas (276): Symbol "faArchive ' é específico para uma plataforma

[Warning] FSisBackup.pas (276): Symbol "faHidden ' é específico para uma plataforma

[Warning] FSisBackup.pas (277): Symbol "faVolumeID 'l é específico para uma plataforma

[Warning] FSisBackup.pas (278): Symbol "faSysFile ' é específico para uma plataforma

[Erro] FSisBackup.pas (278): tipos incompatíveis

[Erro Fatal] SisBackup.dpr (9): Não foi possível compilar unidade usada 'FSisBackup.pas'

entenda-se plataforma, como um comando especifico para uma determinada versão do delphi

abraço

não entendi ? :unsure:

Link para o comentário
Compartilhar em outros sites

  • 0
Amigo, o Jhonas quis dizer que os suportos erros que você encontrou não são erros e sim avisos.

Nada que interfere na compilação do programa..

Mas não compilou e acusou um erro:

[Erro] FSisBackup.pas (278): tipos incompatíveis
[Erro Fatal] SisBackup.dpr (9): Não foi possível compilar unidade usada 'FSisBackup.pas'

e ao compilar fica setado no faArchive

Link para o comentário
Compartilhar em outros sites

  • 0
e ao compilar fica setado no faArchive

ao que tudo indica, voce esqueceu de declarar as uses necessarias ( verifique )

uses SysUtils, FileCtrl;

[Erro] FSisBackup.pas (278): tipos incompatíveis

procure na linha 278 do seu código .... tipos incompativeis. Voce pode estar atribuindo a uma variavel string um valor inteiro sem que tenha sido feito uma conversão de tipos

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

[Warning] FSisBackup.pas (67): Unit 'FileCtrl' é específico para uma plataforma

[Warning]FConfPastas.pas(68): Unit 'FileCtrl' is specific to a platform

são 2 forms diferentes ???

[Error] FConfPastas.pas(68): Identifier redeclared: 'FileCtrl'

identificador redeclarado ... ou seja, voce duplicou essa uses

OBS: o código do link funciona em delphi 5 e 7 ou voce esta esquencendo de alguma coisa no seu código

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
Eu tinha me confudido todo aqui, misturei, virou uma bagunça ai organizei tudo principalmente minha ideia e deu certo....estava fazendo errado mesmo, valeu pela ajuda Jhonas.

Descobri porque estava dando o erro....que no Formulario eu tenho um DbGrid e nele vou gravando em um RxMemoryData os caminhos das pastas para a visualização e para relacionar o grid e a tabela eu utilizo um DataSource, quando coloco o RxMemoryData na Uses é incluida a unit DB, então quando está declarado ela dá conflito com essa função, para arrumar eu coloquei tudo em um DataModule para separar do formulario.

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
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...