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
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