Bonjour,
Y aurait il quelqu'un qui peut m'expliquer en français comment fonctione la fonction SetFilePointer?
Ce serait que pour faire de la lecture de fichier.
source : msdn.microsoft.com...
En particulier, le paramètre lpDistanceToMoveHigh
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 DWORD WINAPI SetFilePointer( __in HANDLE hFile, __in LONG lDistanceToMove, __inout_opt PLONG lpDistanceToMoveHigh, __in DWORD dwMoveMethod );
En fouillant un peu j'ai trouvé à peu près comment elle fonctionne si lpDistanceToMoveHigh=0(null). Càd pour les fichiers de taille limité (environ 2go si je me rappelle)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 lpDistanceToMoveHigh [in, out, optional] A pointer to the high order 32-bits of the signed 64-bit distance to move. If you do not need the high order 32-bits, this pointer must be set to NULL. When not NULL, this parameter also receives the high order DWORD of the new value of the file pointer. For more information, see the Remarks section in this topic.
Elle a un comportement plutôt classique à la get ou put.
Moi j'ai besoin de traité un fichier 3go voir 4go
J'ai trouvé sur le net une fonction qui manipule SetFilePointer avec lpDistanceToMoveHigh<>null (pour lire les gros fichier) mais je ne comprend pas sa logique du tout
Car au départ il lit disons de façon "normal", puis après avoir testé si la position lDistanceToMove était supérieur à une limite, il repart sur un lDistanceToMove négatif... Quant à lpDistanceToMoveHigh, sa fonction ne prévoit de la modifier que bien plus au delà d'une certaine valeur (cçd un fichier de 4go ?)....
J'ai été un peu largué sur la compréhension de ce paramètre
voici le lien du forum : www.vbforums.com...
Et le code qui m'interesse en particulier la procédure Size2Long:
pourquoi longlow devient négatif après que FileSize soit > à sa limite 2147483647 et on arrive toujours à lire la suite du fichier? Quand il démarre à zéro avec la position qui augmente je comprend, c'est le début, mais négatifs, c'est quoi? apparement le fichier à la position 2147483647 +1 à 2147483647 +2147483647 ????
Au final j'ai adapter ma fonction de lecture à sa fonction Size2Long sans comprendre comment en se positionnant en négatif il arrive à lire la continuité du fichier... Ca marche mais j'aimerais comprendre son fonctionnement
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 Private Sub Size2Long(ByVal FileSize As Currency, ByRef LongLow As Long, ByRef LongHigh As Long) '&HFFFFFFFF unsigned = 4294967295 Dim Cutoff As Currency Cutoff = 2147483647 Cutoff = Cutoff + 2147483647 Cutoff = Cutoff + 1 ' now we hold the value of 4294967295 and not -1 LongHigh = 0 Do Until FileSize < Cutoff LongHigh = LongHigh + 1 FileSize = FileSize - Cutoff Loop If FileSize > 2147483647 Then LongLow = -CLng(Cutoff - (FileSize - 1)) Else LongLow = CLng(FileSize) End If End Sub Public Sub API_ReadFile(ByVal FileNumber As Long, ByVal Position As Currency, ByRef BlockSize As Long, ByRef Data() As Byte) Dim PosL As Long Dim PosH As Long Dim SizeRead As Long Dim Ret As Long Size2Long Position, PosL, PosH Ret = SetFilePointer(FileNumber, PosL, PosH, FILE_BEGIN) Ret = ReadFile(FileNumber, Data(0), BlockSize, SizeRead, 0&) BlockSize = SizeRead End Sub
Donc si quelqu'un pouvait m'expliquer et en français ce serait sympa. Merci
Partager