Kopiowane pliku do RAM

0

Tak się ostatnio zastanawiałem jak by tu przyspieszyć działanie mojego programu (program szyfrujący znak po znaku w pliku) i wpadłem na pomysł że można by skopiować plik (lub jego fragment) do pamięci RAM co drastycznie zmniejszy czas odczytu i zapisu z niego.
Moje pytanie: Jak zrobić coś takiego w Borland C++ Builder 6? Powiedzmy że chciałbym skopiować 1024KB pliku do RAM-u jednorazowo.

0

Najpierw new/malloc, Później strumienie albo fopen, fread, fwrite, fsetpos i fclose. A na koniec oczywiście delete/free.

troszkę podobny problem:
http://4programmers.net/Forum/viewtopic.php?id=47242

// ...

#define bufsize (1<<20) // nie chce mi sie liczyc
void fcode(char* filename){
  ffblk r;
  if(findfirst(filename,&r,FA_ARCH))return;
  FILE* f=fopen(filename,"r+");
  if(!f)return;
  long i,j=0;
  fsetpos(f,&j);
  unsigned char* buffer=new unsigned char[bufsize];
  do{
    if(r.ff_fsize-j>=bufsize)i=bufsize;
      else i=r.ff_fsize-j;
    fread((void*)buffer,1,i,f);
    KODUJ(buffer,i);             // czy tez jakoś inaczej
    // i to każdorazowo ilość bajtów do zakodowania
    // nie zawsze może to być dokładnie 1024kB, więc jest potrzebne
    fsetpos(f,&j);
    fwrite((void*)buffer,1,i,f);
    j+=i;
  }while(j<r.ff_fsize); // i/lub (!feof(f)) 
  delete buffer;
  fclose(f);
}

Brak praktycznie obsługi błędów (errno), czy wyjątków (try/catch).
Do wykorzystania pod każdym kompilatorem borlanda :d

// poniższy post jest lepszym rozwiązaniem

0

Istnieje tez cos takiego jak mapowanie pliku (jego fragmentu) do pamieci i nadaje sie to w sam raz do tego celu.
CreateFileMapping, MapViewOfFile itp itd

1 użytkowników online, w tym zalogowanych: 0, gości: 1