Announcement

Collapse
No announcement yet.

Memory Mapped Files

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Memory Mapped Files

    Ich habe das Problem, dass beim Lesen von Dateien über Filemapping die ganze
    Datei nach dem Lesevorgang komplett im Speicher ist.
    Da ich mit sehr grossen Dateien arbeite, ist das natürlich ungünstig.
    Weiss zufällig jemand, wie man die Größe der gemappten Datei begrenzen kann ?

    es muss irgendwas mit folgenden Paramtern zu tun haben..
    fdata := mapviewofFile(maphandle, FILE_MAP_Read, 0, 0, 0);

    aber wenn ich andere Zahlen als Null dort einsetze, kommen beim Lesen immer
    zugriffsverletzungen.
    Weiss jemand Rat ?
    Besten Dank schon im vorraus

  • #2
    Hi,

    Ich hoffe, Du hast auch vorher Dir ein Handle besorgt, mit CreateFileMapping bzw. OpenFileMapping?

    Ansonsten lauten die Parameter (nicht an der C-Deklaration stören):
    <pre>LPVOID MapViewOfFile(
    HANDLE hFileMappingObject, // handle to file-mapping object
    DWORD dwDesiredAccess, // access mode
    DWORD dwFileOffsetHigh, // high-order DWORD of offset
    DWORD dwFileOffsetLow, // low-order DWORD of offset
    SIZE_T dwNumberOfBytesToMap // number of bytes to map
    );</pre>
    Das Handle bekommst Du von den oben genannten Funktionen, der Accessmode stimmt auch. der Offset beschreibt, ab welcher Stelle Du den Speicherbereich haben möchtest, in dwNumberOfBytesToMap kommt die Grösse des Speicherbereichs.

    Aber Vorsicht:
    <pre>
    dwNumberOfBytesToMap
    [in] Specifies the number of bytes of the file to map.
    If dwNumberOfBytesToMap is zero, the entire file is mapped.
    </pre>

    Ansonsten musst Du natürlich schauen, ob der Pointer, den Du zurück bekommst, nicht NIL ist. Dann ist das nämlich fehlgeschlagen.

    Grüße
    Tim

    Comment


    • #3
      In der Jedi Code library (http://delphi-jedi.org/CODELIBJCL) sind Klassen fuer Memory Mapped Files enthalten

      Comment

      Working...
      X