Seite 3 von 3

Re: RAW-Zugriffe

Verfasst: 25.08.2013 05:09
von maupa
Ich habe doch aber noch eine Frage die ich alleine nicht lösen kann, wahrscheinlich wieder Brett vor dem Kopf.
Wenn ich mehr lesen will Logo man vergrößert dem Buffer und so weiter.
Aber irgendwann ist Ende von Speicher.
Wie kann ich ReadFile_ sagen das er die Nächten 1024 Byte lesen soll.
So als Beispiel will ich 16 Gigabyte Auslesen hab aber nur 4 Gigabyte Speicher.
Oder ich will nur ein bestimmten Bereich lesen.. Hat da wer eine Lösung für wie ich direkt dahin lesen kann?

Danke
MAUPA

Re: RAW-Zugriffe

Verfasst: 25.08.2013 10:00
von _JON_
Du müsst einfach nur die Leseposition ändern.

Code: Alles auswählen

Import "kernel32.lib"
  CompilerIf #PB_Compiler_Processor = #PB_Processor_x64
    SetFilePointerEx_.l(*hFile, liDistanceToMove.q, *lpNewFilePointer, dwMoveMethod.l) As "SetFilePointerEx"
  CompilerElse
    SetFilePointerEx_.l(*hFile, liDistanceToMove.q, *lpNewFilePointer, dwMoveMethod.l) As "_SetFilePointerEx@20"  
  CompilerEndIf
EndImport

;Springe 8 KB weiter
SetFilePointerEx_(*hFile, 8192, 0, 0)

;Lese die nächsten 8 KB
ReadFile_(*hFile, *Buffer, 8192, @NumberRead, 0)

Re: RAW-Zugriffe

Verfasst: 25.08.2013 15:03
von maupa
Hl,

wen *Buffer anzeigen will bekomme ich dem fehler:
Die angegebene Speicherposition ist nicht gültig für das Lesen.

Gruß
MAUPA

Re: RAW-Zugriffe

Verfasst: 25.08.2013 19:22
von Andreas21
So wird das nicht gehen:

Code: Alles auswählen

Import "kernel32.lib"
  CompilerIf #PB_Compiler_Processor = #PB_Processor_x64
    SetFilePointerEx_.l(*hFile, liDistanceToMove.q, *lpNewFilePointer, dwMoveMethod.l) As "SetFilePointerEx"
  CompilerElse
    SetFilePointerEx_.l(*hFile, liDistanceToMove.q, *lpNewFilePointer, dwMoveMethod.l) As "_SetFilePointerEx@20"  
  CompilerEndIf
EndImport

;Springe 8 KB weiter
SetFilePointerEx_(*hFile, 8192, 0, 0)

;Lese die nächsten 8 KB
ReadFile_(*hFile, *Buffer, 8192, @NumberRead, 0)

ShowMemoryViewer(*Buffer, 1024)
Sondern so:

Code: Alles auswählen

Define *hFile, NumberRead.l, *Buffer

Import "kernel32.lib"
  CompilerIf #PB_Compiler_Processor = #PB_Processor_x64
    SetFilePointerEx_.l(*hFile, liDistanceToMove.q, *lpNewFilePointer, dwMoveMethod.l) As "SetFilePointerEx"
  CompilerElse
    SetFilePointerEx_.l(*hFile, liDistanceToMove.q, *lpNewFilePointer, dwMoveMethod.l) As "_SetFilePointerEx@20"  
  CompilerEndIf
EndImport
  
*hFile = CreateFile_("\\.\\C:", #GENERIC_READ, #FILE_SHARE_READ | #FILE_SHARE_WRITE, 0, #OPEN_EXISTING, #FILE_ATTRIBUTE_NORMAL, 0) 
If *hFile = #INVALID_HANDLE_VALUE : End "" : EndIf

SetFilePointerEx_(*hFile, 8192, 0, 0)

*Buffer = AllocateMemory(1024)
ReadFile_(*hFile, *Buffer, 1024, @NumberRead, 0)
CloseHandle_(*hFile)

ShowMemoryViewer(*Buffer, 1024)

Re: RAW-Zugriffe

Verfasst: 25.08.2013 19:55
von maupa
danke funktioniert Klasse

Gruß
maupa