Ir al contenido


Foto

Calcular el tamaño de las carpetas


  • Por favor identifícate para responder
4 respuestas en este tema

#1 cannabis

cannabis

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 257 mensajes
  • LocationMéxico

Escrito 23 enero 2010 - 08:17

¿Existe alguna función, que no he encontrado, para medir el tamaño de una carpeta?

Actualmente lo calculo sumando el tamaño de los archivos, pero es muy lento el proceso ya que implica sumar el tamaño de los archivos de las subcarpetas, subsubcarpetas, subsubsubcarpetas, etc.


Salud.

  • 0

#2 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 23 enero 2010 - 08:58

¿Algo como esto?.
  • 0

#3 cannabis

cannabis

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 257 mensajes
  • LocationMéxico

Escrito 23 enero 2010 - 09:51

Gracias maestro enecumene, es lo que necesito.


Salud.

  • 0

#4 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 23 enero 2010 - 12:37

Encontre esto en el blog delphi al limite y creo que pudiera servirte, pero trate de hacerlo funcionar y no pude.
Aqui paso el codigo para que me digan que falta.

Recorrer un árbol de directorios
El procedimiento que voy a mostrar a continuación recorre el contenido de directorios, subdirectorios y archivos volcando la información en un campo memo (TMemo).

Modificando su comportamiento puede ser utilizado para realizar copias de seguridad, calcular el tamaño de un directorio o borrar el contenido de los mismos.

El procedimiento RecorrerDirectorio toma como primer parámetro la ruta que desea recorrer y como segundo parámetro si deseamos que busque también en subdirectorios:

procedure TFBuscar.RecorrerDirectorio( sRuta: String; bIncluirSubdirectorios: Boolean );
var
  Directorio: TSearchRec;
  iResultado: Integer;
begin
  // Si la ruta no termina en contrabarra se la ponemos
  if sRuta[Length(sRuta)] <> '\' then
    sRuta := sRuta + '\';

  // ¿No existe el directorio que vamos a recorrer?
  if not DirectoryExists( sRuta ) then
  begin
    Application.MessageBox( PChar( 'No existe el directorio:' + #13 + #13 + sRuta ), 'Error', MB_ICONSTOP );
    Exit;
  end;

  iResultado := FindFirst( sRuta + '*.*', FaAnyfile, Directorio );
  while iResultado = 0 do
  begin
    // ¿Es un directorio y hay que entrar en él?
    if ( Directorio.Attr and faDirectory = faDirectory ) and bIncluirSubdirectorios then
    begin
      if ( Directorio.Name <> '.' ) and ( Directorio.Name <> '..' ) then
        RecorrerDirectorio( sRuta + Directorio.Name, True );
    end
    else
      // ¿No es el nombre de una unidad ni un directorio?
      if ( Directorio.Attr and faVolumeId <> faVolumeID ) then
        Archivos.Lines.Add( sRuta + Directorio.Name );

    iResultado := FindNext( Directorio );
  end;

  SysUtils.FindClose( Directorio );
end
;


Antes de comenzar a buscar directorios se asegura de que la ruta que le pasemos termine en contrabarra y en el caso de que no sea así se la pone al final.

Para recorrer un directorio utiliza la estructura de datos TSearchRec la cual se utiliza para depositar en ella la información del contenido de un directorio mediante las funciones FindFirst y FindNext.

TSearchRec no contiene la información de todo el directorio sino que es un puntero al directorio o archivo actual. Sólo mirando los atributos mediante la propiedad Attr podemos saber si lo que estamos leyendo es un directorio, archivo o unidad.

También se cuida de saltarse los directorios '.' y '..' ya que sino el procedimiento recursivo RecorrerDirectorio se volvería loco hasta reventar la pila.

Realizar modificaciones para cambiar su comportamiento puede ser peligroso si no lleváis cuidado ya que la recursividad puede de dejar sin memoria la aplicación. Al realizar tareas como borrar subdirectorios mucho cuidado no darle la ruta C:\. Mejor hacer ensayos volcando el contenido en un Memo hasta tener el resultado deseado.   



  • 0

#5 cannabis

cannabis

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 257 mensajes
  • LocationMéxico

Escrito 25 enero 2010 - 10:39

Gracias luk2009.

El procedimiento que presentas lo utilizaba para buscar archivos. En algún mensaje de Foro alguien recomendó FindFile en delphiarea, que es excelente, y es el que utilizo.
Aunque con algunas modificaciones podría servir para calcular el tamaño de las carpetas.


Salud.

  • 0




IP.Board spam blocked by CleanTalk.