UDF > WinAPIEx > Files & Devices > Files >


_WinAPI_SetFilePointer

Déplace le pointeur de fichier d'un fichier spécifié

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

Paramètres

$hFile Handle du fichier à traiter
$iPos Nombre d'octets de déplacement du pointeur de fichier. La valeur maximale est de 2^32.
Une valeur positive déplace le pointeur de fichier vers l'avant dans le fichier, et une valeur négative déplace le pointeur de fichier vers l'arrière.
$iMethod [optionnel] Le point de départ du déplacement du pointeur de fichier.
Peut prendre l'une des valeurs prédéfinies:
    $FILE_BEGIN (0) - (par défaut) Le point de départ est égal à zéro (0) ou au début du fichier
    $FILE_CURRENT (1) - Le point de départ est la valeur actuelle du pointeur de fichier.
    $FILE_END (2) - Le point de départ est la position actuelle de fin de fichier.

Valeur de retour

Succès: Retourne le nouveau pointeur de fichier.
Échec: Retourne (-1) INVALID_SET_FILE_POINTER, appelez _WinAPI_GetLastError() pour obtenir des informations sur l'erreur.

Remarque

Cette fonction peut également être utilisée pour interroger la position actuelle du pointeur de fichier en spécifiant une méthode de déplacement de FILE_CURRENT et une distance de zéro.
Cette fonction enregistre le pointeur de fichier dans une valeur e type LONG. Pour travailler avec des pointeurs de fichiers qui sont supérieures à une valeur LONG unique, il faut utiliser la fonction SetFilePointerEx.
Un pointeur du fichier est la position dans le fichier d'une lecture/écriture de/vers par _WinAPI_ReadFile()/_WinAPI_WriteFile().

En relation

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

Voir aussi

Consultez SetFilePointer dans la librairie MSDN.

Exemple

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

Local $sFile, $hFile, $sText, $nBytes, $tBuffer

; 1) Crée un fichier et écrit des données
$sFile = @ScriptDir & '\test.txt'
$sText = 'abcdefghijklmnopqrstuvwxyz'
$tBuffer = DllStructCreate("byte[" & StringLen($sText) & "]")
DllStructSetData($tBuffer, 1, $sText)
$hFile = _WinAPI_CreateFile($sFile, 1)
_WinAPI_WriteFile($hFile, DllStructGetPtr($tBuffer), StringLen($sText), $nBytes)
_WinAPI_CloseHandle($hFile)
ConsoleWrite('1) '& FileRead($sFile) & @CRLF)

; 2) Lit 6 octets à partir de la position 3
$tBuffer = DllStructCreate("byte[6]")
$hFile = _WinAPI_CreateFile($sFile, 2, 2)
_WinAPI_SetFilePointer($hFile, 3)
_WinAPI_ReadFile($hFile, DllStructGetPtr($tBuffer), 6, $nBytes)
_WinAPI_CloseHandle($hFile)
$sText = BinaryToString(DllStructGetData($tBuffer, 1))
ConsoleWrite('2) '& $sText & @CRLF)

; 3) Ecrit les 6 octets déjà lus à la position 3 à la même position, mais en majuscules
DllStructSetData($tBuffer, 1, StringUpper($sText))
$hFile = _WinAPI_CreateFile($sFile, 2, 4)
_WinAPI_SetFilePointer($hFile, 3)
_WinAPI_WriteFile($hFile, DllStructGetPtr($tBuffer), 6, $nBytes)
_WinAPI_CloseHandle($hFile)
$tBuffer = 0
ConsoleWrite('3) '& FileRead($sFile) & @CRLF)

; 4) Tronque la taille du fichier à 12 octets
$hFile = _WinAPI_CreateFile($sFile, 2, 4)
_WinAPI_SetFilePointer($hFile, 12)
_WinAPI_SetEndOfFile($hFile)
_WinAPI_CloseHandle($hFile)
ConsoleWrite('4) '& FileRead($sFile) & @CRLF)

FileDelete($sFile)