Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=26)
-   -   Tamaño de Ficheros en Windows (https://www.clubdelphi.com/foros/showthread.php?t=95639)

novato_erick 02-04-2022 20:36:02

Tamaño de Ficheros en Windows
 
Estimados Compañeros:


El tema de obtener el tamaño del fichero es super viejo sin embargo ha realizar la función en Delphi para obtener dicho tamaño no me coincide con el real del ejecutable y además al poner la ruta con el nombre del ejecutable.exe correcto no obtengo nada.

Mi duda es:
1- Porque al poner solamente esto 'C:\EDD TXT TECNOLOGIA\Actualizaciones\PVSis\*.*' si me trae el archivo único que tengo como ejecutable.
pero al poner completo esto: 'C:\EDD TXT TECNOLOGIA\Actualizaciones\PVSis\MiEjecutable.exe' no obtengo el tamaño de archivo.
2- Porque Windows me muestra 49.09 MB y la función me devuelve 50.89MB

Código Delphi [-]
function tamanoFichero (const sFileToExamine: UnicodeString): Int64;//  aquí puse de esta menera para que me reconociera el archivo C:\EDD TXT TECNOLOGIA\Actualizaciones\PVSis\*.*
var
  SR: TSearchRec;
begin
  Result := -1;
  try
    if System.SysUtils.FindFirst(sFileToExamine, faSysFile, SR) = 0 then //se se pone 'C:\EDD TXT TECNOLOGIA\Actualizaciones\PVSis\MiEjecutable.exe' nada trae 
    begin
      {$WARN SYMBOL_PLATFORM OFF}
     Result := UInt64(SR.FindData.nFileSizeLow)+
      (UInt64(SR.FindData.nFileSizeHigh)*UInt64(1 shl 32));
      {$WARN SYMBOL_PLATFORM ON}
      //Mi resultado es Diferente al de las propiedades del ejecutable.
     end;
  finally
    System.SysUtils.FindClose(SR);
  end;
end;

podrían alguien con más experiencia porque sucede esto?

Saludos;

novato_erick

Casimiro Noteví 03-04-2022 10:54:01

¿Puedes compartir el fichero que quieres medir, u otro, para que hagamos una prueba?
A mí me ha funcionado bien con los que he probado.

Neftali [Germán.Estévez] 04-04-2022 12:28:21

Yo lo he probado y también me está funcionando correctamente.
Ten en cuenta que esa función te está devlviendo el tamaño en bytes y tú lo estás poniendo en Megas.

Si revisas el tamaño en bytes de las propiedades debería coincidir.
También ten en cuenta que hay 2 tamaños, el real y el que se ocupa en disco (que suele ser mayor) según los bloques que se utilicen.


Casimiro Noteví 04-04-2022 13:54:17

61406466/1024/1024=58,56

escafandra 04-04-2022 22:05:23

Efectivamente el tamaño depende de las unidades y de si es real o en disco.


También puedes usar esta función:
Código Delphi [-]
function _GetFileSize(hFile: THandle): int64;
var
  lo, hi: Cardinal;
begin
  lo:= Windows.GetFileSize(hFile, @hi);
  Result:= hi;
  Result:= (Result shl 32) or lo;
end;


o esta:
Código Delphi [-]
function _GetFileSize(hFile: THandle): int64;
begin
  if not GetFileSizeEx(hFile, Result) then Result:= 0;
end;

Pero en ambos casos debes disponer del Handle del fichero abierto previamente.

Saludos.


La franja horaria es GMT +2. Ahora son las 19:00:18.

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