mapowanie pliku w pamieci

  • 2 Odpowiedzi
  • 1142 Wyświetleń

0 użytkowników i 1 Gość przegląda ten wątek.

*

Offline mustela

  • 47
  • Płeć: Mężczyzna
mapowanie pliku w pamieci
« dnia: Lipiec 31, 2007, 11:50:40 »
Heja,

Mam problem.
Musze dosc duzy plik (duza ilosc danych) zmapowac w pamieci.
tzn. 
Mam plik z duza iloscia danych. chce miec do nich swobodny dostep np.typu : dana
  • [y][z].

nie chce ladowac tego do pamieci bo i nie ma sensu, skoro i tak jest w storage.
proboje teraz z fseek(), ale moze jest jakas inna wygodniejsza metoda np podanie hadlera pliku jako poczatku tablicy w pamieci? ... czy cos w tym stylu.
robil juz ktos cos takiego?
Ma to byc rozwiazanie mozliwe lekkie i bez uzycia baz danych.

Pozdrawiam


*

Offline Wicked

  • ****
  • 829
  • Płeć: Mężczyzna
  • Sprzęt: Acer n311 sd 2GB + toshiba g900 + nokia 5530 4GB
Odp: mapowanie pliku w pamieci
« Odpowiedź #1 dnia: Sierpień 14, 2007, 22:36:14 »
A próbowałeś funkcji winapi? Dawno z winapi nie korzystałem, ale tam są funkcje do obsługi pliku typu:

HFILE OpenFile(
  LPCSTR lpFileName,        // file name
  LPOFSTRUCT lpReOpenBuff,  // file information
  UINT uStyle               // action and attributes
);


*

Offline mustela

  • 47
  • Płeć: Mężczyzna
Odp: mapowanie pliku w pamieci
« Odpowiedź #2 dnia: Sierpień 20, 2007, 13:16:26 »
zrobilem to mniej wiecej tak:


//  Read  G components from Data file from position XYH
bool cGData::ReadData(unsigned int X, unsigned int Y, unsigned int H, stGComponents * Data)
{
   if (isOpen())
   {
      long DataOffset = (H * TotalGridSize + Y * YGridSize+ X) * sizeof(stGComponents);

      int Result = fseek(DataIn, (DataStart + DataOffset), SEEK_SET);
      if (Result)
      {
         printf ("ERROR -> Data read form File -> ErrorNr = %d\n", Result);
         return false;
      }

      fpos_t DataPos;
      if (fgetpos(DataIn, &DataPos))
                                {
                printf("Error -> fgetpos()\n");
                                          return false;
                                }
      else
      ; //   printf ("Read data At %4d\t", DataPos );
      
      
      fread(Data, sizeof(stGComponents), 1, DataIn);

      return true;
   }
   return false;
}


moze komus sie przyda.