PDA

Ver la Versión Completa : C++ Obterner tamaño fichero grande


vivamotos
11-06-2010, 09:05:39
Buenos días,

Tengo una imagen de un disco duro que ocupta 80 Gb, pues bien, yo quisiera capturar ese tamaño en código pero siempre me da el valor 0, os adjunto mi código:


int __fastcall Get_Size(AnsiString path )
{
// #include <fstream>
FILE *pFile;

// get the file stream
pFile=fopen("\\\\192.168.66.59\\imagenes_pcs$\\PCS\\ALCW1002\\ALFREDO_201004262-00-00.mrimg","rb");

// get the file size
long curpos, length;
curpos = ftell(pFile);
fseek(pFile, 0L, SEEK_END);
length = ftell(pFile);
fseek(pFile, curpos, SEEK_SET);
// close stream and release buffer
fclose( pFile );

return length;
}



Con este código puedo saber el tamaño de ficheros pequeños pero los grandes no, que falla?

Casimiro Notevi
11-06-2010, 18:09:03
Esa variable length, ¿de qué tipo es?, no veo la declaración, ¿dónde está?

escafandra
12-06-2010, 00:34:03
__int64 GetFileSize(HANDLE hFile)
{
DWORD hi;
DWORD lo = GetFileSize(hFile, &hi);
__int64 R = hi;
R <<= 32;
return R |= lo;
}

Saludos.

vivamotos
14-06-2010, 08:43:24
Es un long esta puesta miratelo bien,

El código de scafandra no lo entiendo ni lo veo como funciona, lo quisiera saber para c++ builder

Grácias.

escafandra
14-06-2010, 10:53:56
...El código de scafandra no lo entiendo ni lo veo como funciona, lo quisiera saber para c++ builder...:eek:...

Simplemente es el uso de la API GetFileSize en C++ concretamente Builder 5. ¿Lo has comopilado? :rolleyes:

Saludos.

Casimiro Notevi
14-06-2010, 17:06:49
Es un long esta puesta miratelo bien [..]

Vaya despiste que tengo :o

escafandra
15-06-2010, 21:36:13
Por si esta implementación se entiende mejor:
__int64 _GetFileSize(HANDLE hFile)
{
__int64 S;
if (!GetFileSizeEx(hFile, (PLARGE_INTEGER)&S)) S=0;
return S;
}


Saludos.

kenychy
12-08-2010, 16:28:27
hola tio, en que biblioteca se encuentra _int64

escafandra
12-08-2010, 23:58:52
__int64 (http://msdn.microsoft.com/en-us/library/29dh1w7z(VS.80).aspx)

Saludos.

delphi.com.ar
13-08-2010, 00:21:21
Yo en Delphi uso esto, habría que traducirlo a C++


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;

escafandra
13-08-2010, 00:53:42
Si... (http://clubdelphi.com/foros/showpost.php?p=373332&postcount=13)

Saludos.