Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-08-2010
kenychy kenychy is offline
Miembro
 
Registrado: ago 2010
Posts: 45
Poder: 0
kenychy Va por buen camino
como saber el tamaño de un fichero

hola loquillos,tengo un pequeño problema que necesito que me ayuden a resolver, estoy haciendo un copiador, y necesito saber el tamaño de los archivos, cosa que no puedo hacer ya que el tamaño de un archivo de 7gb en bytes es enorme y no tengo un tipo de variable que pueda soportar números tan grande, estuve probando con el long double pero cuando lo saco por el label lo que me sale es -1, no se si esto es problema de conversión o es que este tipo de dato no soporta números tan grande.
Yo creo que windows ya tiene almacenado en algún lugar el tamaño de cada archivo, conjuntamente con la fecha en que se creo y etc. me gustaría saber como puedo acceder a esa información. les agradecería mucho si me ayudaran lo mas rápido posible.
Responder Con Cita
  #2  
Antiguo 11-08-2010
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Esto me funciona con fichero de más de 3gb (el primero que he encontrado por mi disco):

Código Delphi [-]
var
  Size:Int64;
begin

  // Existe?
  if FileExists(edtFileSize1.Text) then begin
    Size := Self.GetFileSize(edtFileSize1.Text);
  end;

Y con este procedimiento puedes cambiarlo a diferentes unidades:

Código Delphi [-]
procedure TFormMain.ConvertFileSizes(Size:Int64; sizeKBouble=0; sizeMBouble=0);
begin

  // Bytes
  edtbytes.Text := IntToStr(Size) + '  b';

  // KB
  sizeKB := (Size / 1024);
  edtKB.Text := FloatToStrF(SizeKB, ffFixed, 18 ,2) + ' KB';

  // MB
  SizeMB := (Size / 1048576);
  edtMB.Text := FloatToStrF(SizeMB, ffFixed, 18 ,2) + ' MB';

  // GB
  edtGB.Text := FloatToStrF((Size / 1073741824), ffFixed, 18 ,2) + ' GB';
end;

__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 11-08-2010
kenychy kenychy is offline
Miembro
 
Registrado: ago 2010
Posts: 45
Poder: 0
kenychy Va por buen camino
tio, yo necesito ese mismo ejemplo pero en C++ bulider y pruevalo con un fichero de mas de 5 gb, porque lo que yo hice tambien funciona con ficheros de este tamaño pero no de mas de 5 gb. y yo necesito saber el tamaño de un fichero sin inportar su tamaño, como si este fuera de 40 gb.
Responder Con Cita
  #4  
Antiguo 11-08-2010
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.195
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Repasa este hilo, ya tratamos el tema .

Saludos.
Responder Con Cita
  #5  
Antiguo 12-08-2010
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Ok, en este caso hay que calcularlo "por partes"; Modifica el código y utiliza el siguiente:

Código Delphi [-]
var
  hdl: THandle;
  FileData: TWin32FindData;
  Size:int64;
begin
  // ini
  Size := 0;
  // Handle del fichero
  hdl := FindFirstFile(PChar(edtFileSize1.text), FileData);
  // Correcto?
  if (hdl <> INVALID_HANDLE_VALUE) then begin
    Windows.FindClose(hdl);
    Int64Rec(Size).Lo := FileData.nFileSizeLow;
    Int64Rec(Size).Hi := FileData.nFileSizeHigh;
  end;
  // Convertir
  ConvertFileSizes(Size);

Si lo pruebas ahora con un fichero de grande (en mi caso con uno de más de 7 gb) obtengo esto:

__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #6  
Antiguo 12-08-2010
kenychy kenychy is offline
Miembro
 
Registrado: ago 2010
Posts: 45
Poder: 0
kenychy Va por buen camino
Cita:
Empezado por Neftali Ver Mensaje
Ok, en este caso hay que calcularlo "por partes"; Modifica el código y utiliza el siguiente:

Código Delphi [-]
var
  hdl: THandle;
  FileData: TWin32FindData;
  Size:int64;
begin
  // ini
  Size := 0;
  // Handle del fichero
  hdl := FindFirstFile(PChar(edtFileSize1.text), FileData);
  // Correcto?
  if (hdl <> INVALID_HANDLE_VALUE) then begin
    Windows.FindClose(hdl);
    Int64Rec(Size).Lo := FileData.nFileSizeLow;
    Int64Rec(Size).Hi := FileData.nFileSizeHigh;
  end;
  // Convertir
  ConvertFileSizes(Size);

Si lo pruebas ahora con un fichero de grande (en mi caso con uno de más de 7 gb) obtengo esto:

hola tio, acabo de probar tu codigo y me da error en Int64Rec(Size).Lo y Int64Rec(Size).Hi, el error dice; {DCC ERROR} Unit1.pas(41): E2018 Record, objet or class type required.
Responder Con Cita
  #7  
Antiguo 12-08-2010
kenychy kenychy is offline
Miembro
 
Registrado: ago 2010
Posts: 45
Poder: 0
kenychy Va por buen camino
hola tio, acabo de probar tu codigo y me da error en Int64Rec(Size).Lo y Int64Rec(Size).Hi, el error dice; {DCC ERROR} Unit1.pas(41): E2018 Record, objet or class type required.
Responder Con Cita
  #8  
Antiguo 12-08-2010
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.195
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Cita:
Empezado por kenychy Ver Mensaje
hola tio, acabo de probar tu codigo y me da error en Int64Rec(Size).Lo y Int64Rec(Size).Hi, el error dice; {DCC ERROR} Unit1.pas(41): E2018 Record, objet or class type required.
¿Estamos hablando en C++ o en delphi? o me he equivocado de foro...

Saludos.
Responder Con Cita
  #9  
Antiguo 12-08-2010
kenychy kenychy is offline
Miembro
 
Registrado: ago 2010
Posts: 45
Poder: 0
kenychy Va por buen camino
tu codigo yo lo probe en delphi 2010, y me dio error. que tu cres de esto.
Responder Con Cita
  #10  
Antiguo 12-08-2010
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por escafandra Ver Mensaje
¿Estamos hablando en C++ o en delphi? o me he equivocado de foro...
Estamos hablando de C++.

Yo tenía código en Delphi y lo coloqué asumiendo que tal vez le serviría; Supongo que si no ha dicho nada es porque más o menos lo entiende o lo puede traducir.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #11  
Antiguo 12-08-2010
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por kenychy Ver Mensaje
tu codigo yo lo probe en delphi 2010, y me dio error. que tu cres de esto.
El código lo he probado con D6 y D2009 y me funciona bien en ambos.
Te subo el proyecto.
Archivos Adjuntos
Tipo de Archivo: zip Size_fichero_directorio.zip (3,9 KB, 79 visitas)
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #12  
Antiguo 12-08-2010
kenychy kenychy is offline
Miembro
 
Registrado: ago 2010
Posts: 45
Poder: 0
kenychy Va por buen camino
gracias man
Responder Con Cita
  #13  
Antiguo 12-08-2010
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.195
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Dos funciones en C:

Código:
__int64 GetFileSize(char *FileName)
{
   WIN32_FIND_DATA Data;
   HANDLE hFile = ::FindFirstFile(FileName, &Data);
   if(hFile==(HANDLE)-1) return 0;
   __int64 S = Data.nFileSizeHigh;
   S = (S << 32) | Data.nFileSizeLow;
   FindClose(hFile);
   return S;
}

//-----------------------------------------------------------------------
__int64 _GetFileSize(char *FileName)
{
   int hFile= _lopen(FileName, 0);
   __int64 S;
   if (!GetFileSizeEx((HANDLE)hFile, (PLARGE_INTEGER)&S)) S=0;
   _lclose(hFile);
   return S;
}

Saludos.

Última edición por escafandra fecha: 12-08-2010 a las 19:26:27.
Responder Con Cita
  #14  
Antiguo 19-11-2010
kenychy kenychy is offline
Miembro
 
Registrado: ago 2010
Posts: 45
Poder: 0
kenychy Va por buen camino
gracias men.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Como saber si un fichero está abierto RaulChemical API de Windows 13 30-12-2008 18:31:42
Cómo saber si un fichero esta marcado de sólo lectura ? David Varios 2 13-08-2008 17:20:19
como saber y cambiar el tamaño a una imagen Negriz C++ Builder 10 09-06-2008 01:00:21
Como controlar el tamaño de un fichero subido al servidor lazar PHP 7 06-03-2007 02:27:22
Quisiera saber como capturo el tamaño de un directorio. JOSE NARANJO API de Windows 1 26-11-2005 00:26:04


La franja horaria es GMT +2. Ahora son las 15:01:38.


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