Toon posts:

[WinAPI] Bestandsgrootte uitlezen via GetFileSize

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik probeer de bestandsgrootte uit te lezen van een bestand via de API call GetFileSize:
code:
1
2
3
4
DWORD GetFileSize(
HANDLE hFile,   // handle of file to get size of
LPDWORD lpFileSizeHigh   // address of high-order word for file size
);

Mijn code in Delphi ziet er zo uit:
code:
1
2
3
4
5
6
7
8
9
// GetFileSize
function TFileInfo.GetFileBytes: cardinal;
var
  Size: ^longword; //
begin
  //GetMem(Size, SizeOf(Size));
  GetFileSize(FFileHandle, @Size);
  Result := Size^;
end;

Maar als ik deze code uitvoer, dan krijg ik steeds een Acces Violation op regel Result := Size^; . De handle FFileHandle zou in principe moeten bestaan, dus ik hoop dat het daar niet aan kan liggen. Heeft iemand enig idee of ik het op een juiste manier probeer uit te lezen? Met de pointers enzo?

Verwijderd

GetFileSize geeft in de 2e parameter de highword terug en als returnvalue de lowword. Tezamen vormen ze dan de size.

Toevallig vanochtend nog naar gekeken. Ik vond
code:
1
2
3
4
5
6
7
8
9
10
11
long   lFileSize;
FILE   *fpFile;

lFileSize=0;
fpFile=fopen("foo.txt","r");
if(fpFile)
{
    fseek(fpFile,0,SEEK_END);
    lFileSize=ftell(fpFile);
    fclose(fpFile);
}

toch wat eleganter. :)

Verwijderd

GetFileSize geeft als return value de low-order DWORD terug van een UINT64, als je de high-order DWORD ook wilt gebruiken dan moet je het adres van een variabel meegeven als parameter, deze kan ook NULL zijn.

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op maandag 11 februari 2002 17:27 schreef Aegis het volgende:
ttt
Dat ziet eruit als een kick na een half uur.

Graag niet doen, er komt vanzelf antwoord en er zijn ook andere mensen die antwoorden willen hebben.

  • Kool
  • Registratie: September 1999
  • Niet online
function MyGetFileSize(const FileName: string): LongInt;
var
SearchRec: TSearchRec;
begin
if FindFirst(ExpandFileName(FileName), faAnyFile, SearchRec) = 0 then
begin
Result := SearchRec.Size;
FindClose(SearchRec);
end
else Result := -1;
end;

Groeten, Kool :)

Verwijderd

Topicstarter
sorry Acm, bedankt Kool: het werkt!
Pagina: 1