PDA

Ver la Versión Completa : Obtener tamaño de archivo con error


jars
20-05-2013, 19:40:58
Hola amigos, estoy usando hace ya algun tiempo la siguiente funcion para obtener el tamaño de un archivo pero en un cliente que tiene instalado Windows server 2008 standard de 32 bits esta funcion debuelve una fecha:

function GetHugeFileSize(const Filename: TFileName): Int64;
var
SearchRec: TSearchRec;
begin
if FindFirst(Filename, faAnyFile, SearchRec) = 0 then
begin
Result := (Int64(SearchRec.FindData.nFileSizeHigh) shl 32)
or SearchRec.FindData.nFileSizeLow;
FindClose(SearchRec);
end else
Result := -1;
end;

Alguien tiene idea de que puede estar pasando?
Si existe otra forma de tomar el tamaño exacto de un archivo en una unidad de red comentenla.
Gracias.

ecfisa
20-05-2013, 21:04:24
Hola jars.

Proba si te funciona de este modo:

function GetFileSizeEx(hFile: THandle; var lpFileSize: Int64): BOOL; stdcall; external 'kernel32.dll';

function GetHugeFileSize(aFileName: TFileName): Int64;
var
hnd : THandle;
begin
hnd := CreateFile(PChar(aFileName),
GENERIC_READ,
0,
nil,
OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,
0);
if not GetFileSizeEx(hnd, Result) then
RaiseLastOSError;
end;

// Ejemplo de llamada:
...
begin
ShowMessage(IntToStr(GetHugeFileSize('C:\...\Nombre_Archivo.Ext')));
end;

Minimum supported server Windows Server 2003 [desktop apps only] (GetFileSizeEx (http://msdn.microsoft.com/en-us/library/windows/desktop/aa364957%28v=vs.85%29.aspx))

Saludos :)

jars
20-05-2013, 21:15:19
Gracias ecfisa, ahora que lo mencionas, si en esa maquina lo ejecuto como aplicación funciona bien pero como servicio, que es como debe correr, me da el error.