Super classe lectrice de fichiers

Description

Cette classe permet de lire d'une facilitée déconcertante de fichiers de N'IMPORTE quelle taille. Et oui. Même des ISOs de 700 mo. Je l'ai testé : succès. Lecture parfaite. Assez vite (testé non compilé en plus). Permet même de dire quelle section du fichier on veut télécharger.
Veillez Toujours donné Lecteur_V3 comme nom à la classe
Exemple :
prendre du 3 caractère au 2456ième caractère

TRÈS Simple. Voici la manière de l'utilisé :

1- Insérez la classe dans un projet

2- Marquez :
<
Public WithEvents lect As Lecteur_V3
>
Dans le haut de la form qui l'utilisera

3-Dans la liste des objets, vous verrez lect. Cliquez dessus. Vous pourrez utiliser ses évèments ainsi. L'evenement Data revoit une partie lue. La variable data contient les données et pourcent, contient le % accompli. L'évènement Finish dit que l'opération est fini.

4-Avant d'utiliser la classe, démarrez là avec
<
Set lect = New Lecteur_V3
>

5-Pour Démarer la lecture d'un fichier :
<
lect.Init(fichier,accupation_de_la_mem,début,fin)
>
Retourne True si les params sont OK
Début correspond à la position à gauche du premier caractère et fin, la position à doite du dernier caractère. Vous verrez bien. Pour Paksize, 1000000 est acceptable.

6-Pour canceller la lecture
<
lect.Cancel
>

7-La propriété Busy permet de savoir si la classe travaille

8-Un prog d'exemple accompagne. Mon projet est un EXE ActiveX. Il est un exécutable et une DLL en même temps. J'ai un bon conseil : copier la classe et coller la dans le répertoire
<
%%\Template\Classes
>
Où %% réprésente le rép où vous avez installer Vb.
Maintenant, quand vous cliquez sur ajouter classe, vous pouvez ajouter mon lecteur à votre projet. C'est plus rapide.

Source / Exemple :


'Nom de la classe :  Lecteur_V3

'Super Lecteur de fichiers
'Fait par Gabriel Champagne le 20 novembre 2003
'Vous êtes autorisé à copier et distribuer cette source
'JE NE PEUX EN AUCUN CAS ÊTRE RESPONSABLE DE DOMMAGES ÉVENTUELS DE TOUTE FORME

'To fire this event, use RaiseEvent with the following syntax:
'RaiseEvent Data[(arg1, arg2, ... , argn)]
Option Explicit
Public Tag As String
Private total As Long
Private rendu As Long
Private ca As Boolean
Private mbus As Boolean
Public Event Data(Data As String, Percent As Long)
Public Event Finish()
'local variable(s) to hold property value(s)
Private mvarPerc As Long 'local copy
Private fso
Private texte

'To fire this event, use RaiseEvent with the following syntax:
'RaiseEvent Finish[(arg1, arg2, ... , argn)]
Sub Cancel()
mbus = False
ca = True
End Sub
Private Sub Clean()
mbus = False
Set fso = Nothing
Set texte = Nothing
End Sub
Public Function Init(File As String, PakSize As Long, Optional Begin As Long, Optional TheEnd As Long = 0) As Boolean
Dim buf As String, reste As Long
Set fso = CreateObject("scripting.filesystemobject")
ca = False
If fso.FileExists(File) = False Or mbus = True Then Init = False: Clean: Exit Function Else: Init = True
rendu = 0
total = 0
reste = FileLen(File)
If Begin <> 0 Then
If TheEnd > reste Or Begin < 1 Or TheEnd < Begin Or Begin > TheEnd Then: Init = False: Clean: Exit Function
Else
TheEnd = reste
End If
rendu = Begin
total = TheEnd - Begin
mbus = True
Set texte = fso.OpenTextFile(File, 1)
texte.Skip (Begin)
Do Until rendu = TheEnd Or (rendu + PakSize) > TheEnd Or ca = True
buf = texte.Read(PakSize)
rendu = rendu + PakSize
RaiseEvent Data(buf, Perc)
DoEvents
Loop
If ca = True Then texte.Close: Clean: Exit Function
If rendu <> TheEnd Then buf = texte.Read(TheEnd - rendu): rendu = (TheEnd - rendu): RaiseEvent Data(buf, Perc)
texte.Close
Clean
RaiseEvent Finish
End Function

Private Property Get Perc() As Long
'used when retrieving value of a property, on the right side of an assignment.
'Syntax: Debug.Print X.Perc

    Perc = Round(((rendu / total) * 100), 0)
    'Debug.Print "rendu: " & rendu & vbCrLf & "total: " & total & vbCrLf & "%: " & Perc
End Property

Public Property Get Busy() As Boolean
 Busy = mbus
End Property

Conclusion :


Qu'est ce que vous en pensez. Noubliez pas, ça marche peu importe la taille. Il ne devrait pas y avoir de bogues

Codes Sources

A voir également