Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-11-2005
JOSE NARANJO JOSE NARANJO is offline
Miembro
 
Registrado: ago 2003
Ubicación: Bogotá (Colombia)
Posts: 10
Poder: 0
JOSE NARANJO Va por buen camino
Unhappy Como capturo el tamaño de un directorio

Quisiera saber como capturo el tamaño de un directorio.
Responder Con Cita
  #2  
Antiguo 25-11-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¿Qué entiendes por tamaño de un directorio? Porque podemos estar hablando de la longitud de su nombre o de los archivos que contiene.

// Saludos
Responder Con Cita
  #3  
Antiguo 25-11-2005
JOSE NARANJO JOSE NARANJO is offline
Miembro
 
Registrado: ago 2003
Ubicación: Bogotá (Colombia)
Posts: 10
Poder: 0
JOSE NARANJO Va por buen camino
Tamaño en disco

Me refiero al tamaño en disco que tiene el directorio, incluyendo los subdirectorios y archivos. Ejemplo quiero saber cuanto tamaño (kb,Gb) tiene el directorio c:\windows
Responder Con Cita
  #4  
Antiguo 25-11-2005
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Segun el truco 351 de trucomania es asi:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
 
  function GetDirectorySize(const ADirectory: string): Integer;
  var 
    Dir:  TSearchRec;
    Ret:  integer;
    Path: string;
  begin 
    Result := 0;
    Path   := ExtractFilePath(ADirectory);
    Ret    := Sysutils.FindFirst(ADirectory, faAnyFile, Dir);
 
    if Ret <> NO_ERROR then 
      exit;
 
    try
      while ret=NO_ERROR do 
      begin 
        inc(Result, Dir.Size);
        if (Dir.Attr in [faDirectory]) and (Dir.Name[1] <> '.') then 
           Inc(Result, GetDirectorySize(Path + Dir.Name + '\*.*'));
        Ret := Sysutils.FindNext(Dir);
      end; 
    finally
      Sysutils.FindClose(Dir);
    end; 
  end; 
 
 
begin 
  Caption:=IntToStr( GetDirectorySize('c:\delphi3') );
end;

Si lo asignas a Caption como esta en la funcion aprecera en la barra de titulo del formulario.

Nota: Por favor no vuelvas a repetir hilos.
espero te sirva .
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #5  
Antiguo 25-11-2005
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
He movido este hilo a API de Windows porque Windows no era la mejor ubicación para una pregunta como esta.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #6  
Antiguo 28-11-2005
JOSE NARANJO JOSE NARANJO is offline
Miembro
 
Registrado: ago 2003
Ubicación: Bogotá (Colombia)
Posts: 10
Poder: 0
JOSE NARANJO Va por buen camino
Hola:

Disculpen por colocar dos hilos. Muchas gracias por la rutina me esta funcionando muy bien. Lo unico es que hay que hacer una anotación.

Cuando hay directorios con tamaño que un Integer no soporta tiene problemas. dir.Size es de tipo Integer, hay que tenerlo en cuenta.

gracias
Responder Con Cita
  #7  
Antiguo 28-11-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por JOSE NARANJO
Cuando hay directorios con tamaño que un Integer no soporta tiene problemas. dir.Size es de tipo Integer, hay que tenerlo en cuenta.
Algo que supongo puede hacerse es moldear Dir.Size a Cardinal con lo que podrías leer por lo menos el doble de tamaño.

Otra cosa es que el tipo TSearchRec tiene un campo FindData que es un record tal como lo define la API de Windows. Ahí encontrarás que hay dos campos de tipo DWord para el tamaño del archivo, nFileSizeHigh y nFileSizeLow con los que, en conjunto, podrías leer enteros hasta de 64 bits. Dado que FindFirst y FindNext usan las rutinas correspondientes de la API, FindFirstFile y FindNextFile, es de suponerse que ahí encontrarás el valor correcto.

// Saludos
Responder Con Cita
  #8  
Antiguo 29-11-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
en concreto, el tamaño exacto es:

nFileSizeHigh * MAXDWORD + nFileSizeLow;

PD: MAXDWORD es una constante de sysutils. El resultado es un Int64.

saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #9  
Antiguo 29-11-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Lepe
El resultado es un Int64.
Tengo mis dudas al respecto. La ayuda de Delphi en el tema de operadores dice:

Cita:
The following rules apply to arithmetic operators.

The value of x/y is of type Extended, regardless of the types of x and y. For other arithmetic operators, the result is of type Extended whenever at least one operand is a real; otherwise, the result is of type Int64 when at least one operand is of type Int64; otherwise, the result is of type Integer. If an operand's type is a subrange of an integer type, it is treated as if it were of the integer type.
En la fórmula

nFileSizeHigh * MAXDWORD + nFileSizeLow

todos los operandos son integer así que creo que cae en el caso señalado. Supongo, sin probarlo, que tendría que ser algo como:

Int64(nFileSizeHigh) * MAXDWORD + nFileSizeLow

// Saludos
Responder Con Cita
  #10  
Antiguo 30-11-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Como has visto mi mensaje era bastante escueto, solo presentaba la fórmula, que no es nada obvio deducirla; el resto son detalles, que dicho sea de paso quedan aclarados por tí

saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 17:38:09.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi