Avatar billede nubi19 Nybegynder
10. juni 2003 - 20:43 Der er 9 kommentarer og
1 løsning

Hvordan ses filesize > 512 mb ?

Jeg bruger BCB og er ved at lave et lille program der skal kunne læse binære filer på over 512 mb, men jeg skal bruge filesize for at vide hvornår jeg skal stoppe med at læse ind, og en long kan kun tage op til 512 mb, og det er en long der bruges i struct ffblk som jeg bruger sammen med findfirst. Så hvordan gør jeg så sådanne at jeg kan aflæse en filesize på f.eks. 1gb ?
Avatar billede arne_v Ekspert
10. juni 2003 - 20:48 #1
En signed long kan tage op til 2 GB og en unsigned long op til 4 GB.
Avatar billede arne_v Ekspert
10. juni 2003 - 20:50 #2
FindFileFirst/FindFileNext returnerer en struct med:

    DWORD nFileSizeHigh;
    DWORD nFileSizeLow;

mit gæt er derfor at den kan klare filer med størrelser i 64 bit !
Avatar billede arne_v Ekspert
10. juni 2003 - 20:58 #3
Eksempel kode:

#include <stdio.h>

#include <windows.h>

int main()
{
  WIN32_FIND_DATA data;
  HANDLE h = FindFirstFile("*.c",&data);
  if(h!=NULL) {
    printf("%s %d %d\n",data.cFileName,data.nFileSizeHigh,data.nFileSizeLow);
    while(FindNextFile(h,&data)) {
        printf("%s %d %d\n",data.cFileName,data.nFileSizeHigh,data.nFileSizeLow);
    }
  }
  FindClose(h);
  return 0;
}
Avatar billede arne_v Ekspert
10. juni 2003 - 20:59 #4
Du kan så ligge high og low sammen i en 64 bit integer.
Avatar billede nubi19 Nybegynder
10. juni 2003 - 21:00 #5
nu føler jeg mig dum, for jeg har jo divideret med 8 pga. det er 32bit - dooooh jeg er en n00b, selvf. kan den tage 2gb signed, bare mig der ik ku regne :D
Avatar billede arne_v Ekspert
10. juni 2003 - 21:00 #6
(og hvis du undrer dig over *.c, så er det genbrug fra anden sammenhæng)
Avatar billede nubi19 Nybegynder
10. juni 2003 - 21:03 #7
Hov lige en anden ting når jeg nu har dig, hvordan opretter jeg en tom binær fil ? ostream laver vel en tekst fil, ik ?
Avatar billede arne_v Ekspert
10. juni 2003 - 21:09 #8
Nej - du kan angive den skal være binær.

ofstream(filename, ios::binary)

elle rnoget i den stil.

Jeg checker lige !
Avatar billede arne_v Ekspert
10. juni 2003 - 21:26 #9
#include <fstream>

using namespace std;

int main()
{
  ofstream f("bin.dat",ios::binary);
  char b[10];
  for(int i = 0; i < sizeof(b); i++) b[i] = 65 + i;
  f.write(b,sizeof(b));
  f.close();
}

burde være OK.
Avatar billede nubi19 Nybegynder
10. juni 2003 - 21:32 #10
mange tak :)
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