C'est une très bonne classe pour ouvrir des fichiers. Elle est assez simple d'utilisation par rapport à ce quelle peut faire. Elle peut :
-Ouvrir des fichier
-En spécifier la disposition (écraser si existe, créer si absent, ouvrir seulement, ouvrir ou créer...)
-Se déplacer à son aise dans un fichier
-"Patcher" les zones vouluent
-Lire les données et les envoyers directements à la variable (pas de "=")
-Donner la position du curseur dans le fichier
-Elle donne la taille du ficher, le handle
-Pas besoins de la redéclarer. Fermez le fichier pi ouvrez en un autre avec la même classe.
-Définitez le mode de partage.
Source / Exemple :
'/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/'=======
'UTILISATION
'=======
'1-Déclarez la classe
dim txt as new textstream
'2-Ouvrez le fichier
txt.OpenOrCreateFile "c:\coolx.txt", Forwritting, OpenOrCreate
'Explication:
'file=Le fichier à ouvrir
'IOmode=Le mode d'ouverture : écriture ou lecture du fichier?
'Disposition=Comme il faut agir?: le fichier doit exister, écraser ou créer le fichier, ...
'ShareMode=Le mode de partage du fichier (laisser comme ça)
'Flags=Options diverses (File_Sequential_Scan peut carrément aide pour la lecture
'de gros fichiers)
'3-Positionez vous dans le fichier (si nécéssaire)
txt.SetPosition File_Current, 5
'Explication:
'StartPosition=À partir de où ce déplacer?
'Distance=Déplacer de combiens?
'POUR OUVRIR UN FICHIER ET SE PLACER À SA FIN, FAÎTES :
TXT.SetPosition
'4-Lecture/Écriture
'Trop simple ...
'Quand c'est "ToBuffer", indiquez la variable STRING dans laquelle il faut aller porter
'les données.
'5-Fermeture
'Simplement txt.closefile
'6-Skipper des caractères/lignes
txt.skip %nb de caractères%
txt.skipline 'saute un ligne
'\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/
'??????????????????????????????????????????????????????????
'Classe TextStream v1.0
'Créer par DeadlyPredator le 8 mai 2004
'JE NE SUIS PAS RESPONSABLE DE TOUT ÉVENTUEL DOMMAGE LIÉE À L'UTILISATION
'DE CETTE SOURCE.
'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Option Explicit
'Déclarations {
Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, ByVal lpSecurityAttributes As Any, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Private Declare Function GetFileSize Lib "kernel32" (ByVal hFile As Long, lpFileSizeHigh As Long) As Long
Private Declare Function SetFilePointer Lib "kernel32" (ByVal hFile As Long, ByVal lDistanceToMove As Long, lpDistanceToMoveHigh As Long, ByVal dwMoveMethod As Long) As Long
Private Declare Function ReadFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, lpNumberOfBytesRead As Long, ByVal lpOverlapped As Any) As Long
Private Declare Function WriteFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToWrite As Long, lpNumberOfBytesWritten As Long, ByVal lpOverlapped As Any) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Public Enum FileFlags
File_No_Buffering = &H20000000
File_Sequential_Scan = &H8000000
File_Random_Access = &H10000000
File_Write_Through = &H80000000
End Enum
Public Enum FilePosition
File_Begin = 0
File_End = 2
File_Current = 1
End Enum
Public Enum FileAccesMode
OpenOrCreate = 4
OpenOnly = 3
CreateOrOverwrite = 2
CreateOnly = 1
End Enum
Public Enum FileIOmode
ForReading = &H80000000
Forwritting = &H40000000
End Enum
Public Enum FileShareMode
ShareRead = &H1
ShareWritting = &H2
ShareBoth = &H3
End Enum
'}
'Propriétés {
Private mHandle As Long
Private mIOmode As Long
Private mShareMode As Long
Private mSize As Long
Private mCurrentPosition As Long
Public Property Get AtEndOfStream() As Boolean
If mCurrentPosition = mSize Then AtEndOfStream = True
End Property
Public Property Get Handle() As Long
If mHandle = -1 Then Handle = 0 Else: Handle = mHandle
End Property
Public Property Get IOmode() As FileIOmode
IOmode = mIOmode
End Property
Public Property Get ShareMode() As FileShareMode
ShareMode = mShareMode
End Property
Public Property Get Size() As Long
Size = mSize
End Property
Public Property Get CurrentPosition() As Long
CurrentPosition = mCurrentPosition
End Property
'}
'Ouverture {
Public Function OpenOrCreateFile(file As String, Optional IOmode As FileIOmode = &H80000000, Optional Disposition As FileAccesMode = 3, Optional ShareMode As FileShareMode = &H3, Optional Flags As FileFlags = 0) As Boolean
mHandle = CreateFile(file, IOmode, ShareMode, 0&, Disposition, Flags, 0)
If mHandle = -1 Then mHandle = 0: Exit Function
mShareMode = ShareMode
mIOmode = IOmode
mSize = GetFileSize(mHandle, 0)
OpenOrCreateFile = True
End Function
'}
'Déplacer le curseur {
Public Sub SetPosition(Optional StartPosition As FilePosition = 2, Optional Distance As Long = 0)
If mHandle = 0 Or Distance < 0 Then Exit Sub
If Distance > mSize And StartPosition = 2 Then Exit Sub
SetFilePointer mHandle, Distance, 0, StartPosition
Select Case StartPosition
Case 0 'b
mCurrentPosition = Distance
Case 1 'c
mCurrentPosition = mCurrentPosition + Distance
Case 2 'e
mCurrentPosition = mSize - Distance
End Select
End Sub
'======================================================
'Pour skipper {
Public Sub Skip(Lenght As Long)
If mHandle = 0 Or mIOmode <> &H80000000 Or mCurrentPosition + Lenght > mSize Then Exit Sub
SetPosition File_Current, Lenght
End Sub
Public Sub SkipLine()
If mHandle = 0 Or mIOmode <> &H80000000 Then Exit Sub
Dim FileStep As Integer, CharBuffer As String
Do Until FileStep = 2 Or mCurrentPosition = mSize
CharBuffer = "0"
ReadFile mHandle, ByVal CharBuffer, 1, 0, 0&
mCurrentPosition = mCurrentPosition + 1
If CharBuffer = Chr(13) Then FileStep = 1
If CharBuffer = Chr(10) And FileStep = 1 Then FileStep = 2
DoEvents
Loop
End Sub
'}
'}
'Lire du texte {
Public Sub ReadDataToBuffer(Buffer As String, Optional Lenght As Long = 1)
If mHandle = 0 Or mIOmode <> &H80000000 Or mCurrentPosition + Lenght > mSize Then Exit Sub
Buffer = String$(Lenght, "0")
ReadFile mHandle, ByVal Buffer, Lenght, 0, 0&
mCurrentPosition = mCurrentPosition + Lenght
End Sub
'======================================================
Public Function ReadData(Optional Lenght As Long = 1) As String
If mHandle = 0 Or mIOmode <> &H80000000 Or mCurrentPosition + Lenght > mSize Then Exit Function
Dim Buffer As String
Buffer = String$(Lenght, "0")
ReadFile mHandle, ByVal Buffer, Lenght, 0, 0&
mCurrentPosition = mCurrentPosition + Lenght
ReadData = Buffer
End Function
'}
'Lire une ligne {
Public Sub ReadLineToBuffer(Buffer As String)
If mHandle = 0 Or mIOmode <> &H80000000 Then Exit Sub
Dim FileStep As Integer, CharBuffer As String, LineBuffer As String
Do Until FileStep = 2 Or mCurrentPosition = mSize
CharBuffer = "0"
ReadFile mHandle, ByVal CharBuffer, 1, 0, 0&
LineBuffer = LineBuffer & CharBuffer
mCurrentPosition = mCurrentPosition + 1
If CharBuffer = Chr(13) Then FileStep = 1
If CharBuffer = Chr(10) And FileStep = 1 Then FileStep = 2
DoEvents
Loop
Buffer = LineBuffer
End Sub
'======================================================
Public Function ReadLine() As String
If mHandle = 0 Or mIOmode <> &H80000000 Then Exit Function
Dim FileStep As Integer, CharBuffer As String, LineBuffer As String
Do Until FileStep = 2 Or mCurrentPosition = mSize
CharBuffer = "0"
ReadFile mHandle, ByVal CharBuffer, 1, 0, 0&
LineBuffer = LineBuffer & CharBuffer
mCurrentPosition = mCurrentPosition + 1
If CharBuffer = Chr(13) Then FileStep = 1
If CharBuffer = Chr(10) And FileStep = 1 Then FileStep = 2
DoEvents
Loop
ReadLine = LineBuffer
End Function
'}
'Écriture {
Public Sub WriteData(Data As String)
If mHandle = 0 Or mIOmode <> &H40000000 Then Exit Sub
WriteFile mHandle, ByVal Data, Len(Data), 0, 0&
mCurrentPosition = mCurrentPosition + Len(Data)
End Sub
'======================================================
Public Sub WriteLine(Data As String)
If mHandle = 0 Or mIOmode <> &H40000000 Then Exit Sub
Data = Data & vbCrLf
If mHandle = 0 Or mIOmode <> &H40000000 Then Exit Sub
WriteFile mHandle, ByVal Data, Len(Data), 0, 0&
mCurrentPosition = mCurrentPosition + Len(Data)
End Sub
Public Sub WriteBlankLines(Number As Long)
If mHandle = 0 Or mIOmode <> &H40000000 Then Exit Sub
Dim i As Long
For i = 1 To Number
WriteLine ""
Next
End Sub
'}
'Fermeture {
Public Sub CloseFile()
If mHandle <> 0 Then CloseHandle mHandle
End Sub
'}
Private Sub Class_Terminate()
CloseFile
End Sub
Conclusion :
Vos commentaires?
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.