PDA

Ver la Versión Completa : Filesize ficheros grandes


johan
13-09-2012, 00:39:01
Buenas a todos, me estoy encontrando que con Filesize en un fichero de mas de dos gb me devuelve un numero negativo... Alguien se ha encontrado con el mismo problema y lo ha podido solucionar.
Gracias.,

Casimiro Notevi
13-09-2012, 00:43:40
Hola, recuerda poner los temas en los foros adecuados, este foro es el de "Delphi/web", cosa que no tiene nada que ver tu pregunta, lo paso a "Varios".

En relación a tu pregunta, deberías poner el código fuente, no somos adivinos para ver qué estás haciendo, aunque se intuye que estás usando una variable integer y por eso no puede representar números tan grandes, declárala del tipo int64

johan
13-09-2012, 00:57:48
Gracias Casimiro. Es la función FileSize(z) que averigua el tamaño del fichero pero retorna Integer, por lo que estuve mirando.

Casimiro Notevi
13-09-2012, 01:04:06
A ver...

function FileSize(const FileName: string): Int64;
var sr: TSearchRec;
begin
if FindFirst(FileName, faAnyFile, sr) = 0 then
try
Result := Int64(sr.FindData.nFileSizeHigh) shl Int64(32) + Int64(sr.FindData.nFileSizeLow);
finally
SysUtils.FindClose(sr);
end
else
Result := -1;
end;

ecfisa
13-09-2012, 01:08:36
Hola.

Proba de este modo:

function FileLongSize(const FileName: string): Int64;
var
FindData: TWin32FindData;
begin
Windows.FindClose(FindFirstFile(PChar(FileName), FindData));
Result := FindData.nFileSizeHigh shl 32 or FindData.nFileSizeLow;
end;


Saludos.

Edito: Disculpa, no había visto tu mensaje Casimiro :o, bueno otra opción... :)

Casimiro Notevi
13-09-2012, 01:29:38
Edito: Disculpa, no había visto tu mensaje Casimiro :o, bueno otra opción... :)
Nada que disculpar, es "casi" lo mismo, por poco hacemos un "copia->pega" del mismo :D

ecfisa
13-09-2012, 03:39:46
Nada que disculpar, es "casi" lo mismo, por poco hacemos un "copia->pega" del mismo :D
Es que no hay mucho mas para inventar... :D

Saludos. :)

escafandra
13-09-2012, 14:16:22
Otra forma (recordando este hilo: C++ Obterner tamaño fichero grande (http://clubdelphi.com/foros/showthread.php?t=68399)...)


function GetFileSizeEx(hFile: THandle; var Data: int64): boolean; stdcall; external 'Kernel32.dll' name 'GetFileSizeEx';

implementation


function _GetFileSize(hFile: THandle): int64;
begin
if not GetFileSizeEx(hFile, Result) then Result:= 0;
end;



Saludos.

johan
14-09-2012, 00:07:20
Perfecto gracias a todos !!!! asunto resuelto.