Super classe lectrice de fichiers

Soyez le premier à donner votre avis sur cette source.

Vue 2 564 fois - Téléchargée 312 fois

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

Ajouter un commentaire Commentaires
Messages postés
216
Date d'inscription
mercredi 2 avril 2003
Statut
Membre
Dernière intervention
5 mai 2004

J'ai fait une mise à jour : Pour l'exe, j'ai mis 2 threads et pour la compilation, j'ai enlevé des contrôles d'erreurs inutiles. J'ai ajouter Option Explicit et j'ai déclarer toutes les variables.
Messages postés
216
Date d'inscription
mercredi 2 avril 2003
Statut
Membre
Dernière intervention
5 mai 2004

OK. Cette classe est une MERVEILLE. ELLE MARCHE PEU IMPORTE LA TAILLE. En plus, on peut choisir une section du fichier. Je vais voir comment je peux optimiser d'avantage. Je vais ajouter Option Explicit pi nettoyer 1 peu. En plus, ajouter la classe dans template pi vous pourrez l'ajouter à votre projet comme un form.
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
pas mal, cette idée de faire une classe avec evenements pour effectuer la lecture.....

je n'ai pas regardé le code, mais ta lecture est asynchrone. As tu détaché une Thread juste pour la lecture ?? ce serait bien, et accelererait davantage le processus, tout en ne penalisant pas le Main...

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.