Avatar billede rrm Nybegynder
23. oktober 2007 - 14:50 Der er 6 kommentarer og
1 løsning

Få et WinAPI Handle fra en fstream

Hej

Er det mulig at få en WinAPI handle fra en fstream, jeg skal bruge det til at kalde GetFileSizeEx for at få størrelsen på en fil.
Avatar billede bertelbrander Novice
23. oktober 2007 - 19:55 #1
Det tror jeg ikke.
Du kan bruge FindFirstFile, FindNextFile og FindClose:
http://msdn2.microsoft.com/en-us/library/aa364418.aspx
Til at få størrelsen som 64 bits, uden at åbne filen.
Avatar billede rrm Nybegynder
24. oktober 2007 - 12:39 #2
Tak for det...
På siden skriver de at man kan få størrelsen ved (WIN32_FIND_DATA) (nFileSizeHigh * (MAXDWORD+1)) + nFileSizeLow, men får en warning om at:

warning C4307: '+' : integral constant overflow

Nogen ideer til hvordan dette kan løses???
Avatar billede bertelbrander Novice
24. oktober 2007 - 19:24 #3
Problemet er at (MAXDWORD + 1) er større end en int (32 bits).
Du skal under alle omstændigheder gemmer resultatet i en 64 bits integer (f.eks __int64) for at kunne håndtere størrelsen på filer der er på mere end 6 Giga Bytes.

Du kan regne størrelsen ud med:
((__int64)nFileSizeHigh << 32) + nFileSizeLow;

Eller:
(nFileSizeHigh * (__int64(MAXDWORD)+1)) + nFileSizeLow;
Avatar billede rrm Nybegynder
30. oktober 2007 - 12:38 #4
Tak for hjælpen
Avatar billede rrm Nybegynder
18. januar 2008 - 23:24 #5
Vil du have point???
Avatar billede bertelbrander Novice
18. januar 2008 - 23:58 #6
Nej tak, jeg samler ikke på point.
Avatar billede rrm Nybegynder
19. januar 2008 - 10:31 #7
ok, så lukker jeg også de andre spm, hvor du har svaret...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester