Funktionreferenz


_WinAPI_SetFilePointer

Beschreibung anzeigen in

Verschiebt den Dateizeiger der angegebenen Datei

#include <WinAPIFiles.au3>
_WinAPI_SetFilePointer ( $hFile, $iPos [, $iMethod = 0] )

Parameter

$hFile Handle der zu bearbeitenden Datei
$iPos Anzahl der Bytes, um den Dateizeiger zu bewegen. Maximaler Wert beträgt 2^32
Ein positiver Wert bewegt den Dateizeiger vorwärts in der Datei, und ein negativer Wert bewegt ihn rückwärts.
$iMethod [optional] Der Startpunkt für die Dateizeigerbewegung.
Kann einer der vordefinierten Werte sein:
    $FILE_BEGIN (0) = (Standard) Der Startpunkt ist Null (0) oder der Beginn der Datei
    $FILE_CURRENT (1) = Der Startpunkt ist der aktuelle Wert des Dateizeigers.
    $FILE_END (2) = Der Startpunkt ist die aktuelle Datei-Ende Position.

Rückgabewert

Erfolg: Neuer Dateizeiger.
Fehler: INVALID_SET_FILE_POINTER (-1). Es ist _WinAPI_GetLastError() aufzurufen um erweiterte Fehlerinformationen zu erhalten.

Bemerkungen

Diese Funktion kann außerdem dazu benutzt werden, um die aktuelle Position des Dateizeigers zu ermitteln, indem man als Bewegungsmethode FILE_CURRENT und eine Distanz von 0 festlegt.
Diese Funktion speichert den Dateizeiger in einem LONG Wert. Um mit Dateizeigern die größer als ein LONG Wert sind zu arbeiten, muss die SetFilePointerEx Funktion benutzt werden.
Ein Dateizeiger bestimmt die Position innerhalb der Datei zum Lesen/Schreiben in/von durch _WinAPI_ReadFile()/_WinAPI_WriteFile().

Verwandte Funktionen

_WinAPI_CloseHandle, _WinAPI_CreateFile, _WinAPI_FlushFileBuffers, _WinAPI_GetFileSizeEx, _WinAPI_ReadFile, _WinAPI_SetEndOfFile, _WinAPI_WriteFile

Siehe auch

Suche nach SetFilePointer in der MSDN Bibliothek.

Beispiel

#include <WinAPIFiles.au3>
#include <WinAPIHObj.au3>

Global $sTempFile, $hFile, $sText, $nBytes, $tBuffer, $iSize

; 1) Erstellt eine Datei und schreibt Daten hinein
$sTempFile = @ScriptDir & '\test.txt'
$sText = 'abcdefghijklmnopqrstuvwxyz'
$tBuffer = DllStructCreate("byte[" & StringLen($sText) & "]")
DllStructSetData($tBuffer, 1, $sText)
$hFile = _WinAPI_CreateFile($sTempFile, 1)
_WinAPI_WriteFile($hFile, DllStructGetPtr($tBuffer), StringLen($sText), $nBytes)
$iSize = _WinAPI_GetFileSizeEx($hFile)
_WinAPI_CloseHandle($hFile)
; Ausgabe in die Konsole
ConsoleWrite('1):' & $iSize & ' ' & FileRead($sTempFile) & @CRLF)

; 2) liest 6 Bytes ab Position 3
$tBuffer = DllStructCreate("byte[6]")
$hFile = _WinAPI_CreateFile($sTempFile, 2, 2)
$iSize = _WinAPI_GetFileSizeEx($hFile)
_WinAPI_SetFilePointer($hFile, 3)
_WinAPI_ReadFile($hFile, DllStructGetPtr($tBuffer), 6, $nBytes)
_WinAPI_CloseHandle($hFile)
$sText = BinaryToString(DllStructGetData($tBuffer, 1))
; Ausgabe in die Konsole
ConsoleWrite('2):' & $iSize & ' ' & $sText & @CRLF)

; 3) Schreibt die vorher gelesenen 6 Bytes an die gleiche Position, aber in Großbuchstaben
DllStructSetData($tBuffer, 1, StringUpper($sText))
$hFile = _WinAPI_CreateFile($sTempFile, 2, 4)
$iSize = _WinAPI_GetFileSizeEx($hFile)
_WinAPI_SetFilePointer($hFile, 3)
_WinAPI_WriteFile($hFile, DllStructGetPtr($tBuffer), 6, $nBytes)
_WinAPI_CloseHandle($hFile)
$tBuffer = 0
; Ausgabe in die Konsole
ConsoleWrite('3):' & $iSize & ' ' & FileRead($sTempFile) & @CRLF)

; 4) kürze die Dateigröße auf 12 Bytes
$hFile = _WinAPI_CreateFile($sTempFile, 2, 4)
_WinAPI_SetFilePointer($hFile, 12)
_WinAPI_SetEndOfFile($hFile)
$iSize = _WinAPI_GetFileSizeEx($hFile)
_WinAPI_CloseHandle($hFile)
; Ausgabe in die Konsole
ConsoleWrite('4):' & $iSize & ' ' & FileRead($sTempFile) & @CRLF)

FileDelete($sTempFile)