file mapping
-
Ich habe mit den Funktionen CreateFileMapping und MapViewOfFile einen Pointer auf die Daten im File geholt. Das funktioniert soweit super.
Wie kann ich nun mit den Parametern dwFileOffsetHigh und dwFileOffsetLow die Daten ab einer bestimmten Stelle im File "holen"? Was ist eigentlich mit High und Low gemeint? Wieso 2 Offsets? Na jedenfalls krieg ich jedesmal nen Fehler, wenn darin was andres steht als 0.
Ich möchte einfach aus einer Bilddatei die reinen Pixeldaten extrahieren, die Länge des Headers kann ich ja einfach ermitteln, da ich die Anzahl der Pixelbytes kenne und weiss wie groß mein File ist. Wie kann ich nun den Offset des Headers der Funktion MapViewOfFile übergeben?
-
low ist dein offset.
falls low saugroß wird, sagen wir mal bei nem dicken file von 20G, dann mßte hi dazunehmen, weil low nicht genu bits hat.
zur zeit nimm nur low und high hat immer 0.kann es sein, daß low ein ganzzahliges vielfaches von 4096 sein muß? irgend sowas war da doch?
-
Also muss ich bei Low die Anzahl der Offset-Bytes angeben? Das haut aber irgendwie nicht hin, und mein Offset ist auch keine 4096 Bytes groß. Habs auch mal mit 4096 probiert, aber MapViewOfFile() liefert mir immer nen Null-Pointer...
die MSDN schreibt:
dwFileOffsetLow [in] Specifies the low-order DWORD of the file offset where mapping is to begin. The combination of the high and low offsets must specify an offset within the file that matches the system's memory allocation granularity, or the function fails. That is, the offset must be a multiple of the allocation granularity.Bedeutet das nun, dass mir das FileMapping gar nichts bringt, wenn ich einen ganz bestimmten Teil einer Datei, wobei der Offset immer unterschiedlich ist und nicht mit einem vielfachen allocation granularity übereinstimmt? Gibts irgendwelche Alternativen?
-
deine system's memory allocation granularity ist 65536, oder?
Bedeutet das nun, dass mir das FileMapping gar nichts bringt, wenn ich einen ganz bestimmten Teil einer Datei, wobei der Offset immer unterschiedlich ist und nicht mit einem vielfachen allocation granularity übereinstimmt? Gibts irgendwelche Alternativen?
kannstedenn nicht die ganze datei mappen? es geht bei dir doch um winzige dateien mit nur ein paar MB, oder?
und dann kannste ganz hyper-düper-herrvorragend dadrin umhersprimgen. einfach im ram umherspringen.
-
Ich hatte das ganze irgendwie so verstanden, das ich bereits mit CreateFileMapping() die ganze Datei mappe und dann mit MapViewOfFile an die Stelle springe, die ich will und mir so viele Bytes da raushole wie ich brauche und dann mit dem Pointer den ich kriege einfach normal weitermachen kann.
Was meinst du damit, die ganze Datei zu mappen und dann einfach im ram umherspringen? klingt klasse, wie mach ich das?
-
aua