Jump to content
Fórum Script Brasil
  • 0

(Resolvido) Tamanho de pasta


robinhocne

Question

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 ?

Edited by robinhocne
Link to comment
Share on other sites

11 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...