Man lernt nie aus, bzw. man hat vermutlich nie die Dokumentation vollständig und richtig gelesen.
Wenn man eine Datei nicht sequentiell liest ist es normal Seek, Read/Write in dieser Folge zu nutzen. Order eben SetFilePointer, ReadFile/WriteFile.
In einer StackOverflow Antwort stolperte ich über die Aussage:
you not need use
SetFilePointerEx
– this is extra call. use explicit offset inWriteFile
/ReadFile
instead
(Rechtschreibung nicht korrigiert).
Aber der Inhalt war für mich neu. Sieh mal an, selbst wen man kein FILE_FLAG_OVERRLAPPED benutzt, kann man die OVERLAPPED Struktur nutzen und die darin vorhandenen Offsets verwenden.
Diese werden sogar netterweise angepasst, nachdem gelesen/geschrieben wurde.
Zitat aus der MSDN (der Text ist gleichlautend für WriteFile):
Considerations for working with synchronous file handles:
- If lpOverlapped is NULL, the read operation starts at the current file position and ReadFile does not return until the operation is complete, and the system updates the file pointer before ReadFile returns.
- If lpOverlapped is not NULL, the read operation starts at the offset that is specified in the OVERLAPPED structure and ReadFile does not return until the read operation is complete. The system updates the OVERLAPPED offset before ReadFile returns.