Club Francophone des développeurs Visual Basic


  Vb-French  Vb-English  Autres langages
               Rajoutez votre site

 

Les accès aux fichiers

Lundi 21 juin 2004

Gilmir Langlade informatique

Tutorial 34    Sommaire
Dans cette partie, nous allons traiter le principe des entrées/sorties dans les fichiers. Tôt ou tard, vous serez amené à créer et à échanger des données avec un fichier externe à votre application. Qu'il s'agisse d'enregistrer des informations de stockage (pour enregistrer une configuration par exemple.), ou des informations d'une base de données, beaucoup de vos programmes reposeront sur des fichiers externes.

L'inconvénient de ce type de fichier est que même pour mettre à jour un seul octet, le programme devra traiter le fichier tout entier. Le type séquentiel est plus souvent utilisé pour travailler avec les fichiers texte, les fichiers de paramétrage, ou pour le stockage de petites quantités de données.

      Avant de pouvoir utiliser un fichier externe, il vous faudra d'abord l'ouvrir avec l'instruction 'Open"

L'instruction OPEN :

Avant de pouvoir exécuter une opération d'Entrée/Sortie sur un fichier, vous devez l'ouvrir. L'instruction Open permet d'associer une zone tampon d'Entrée/Sortie au fichier et de déterminer le mode d'accès à ce fichier dans cette zone.

Si le fichier indiqué par l'argument pathname n'existe pas, il est créé au moment où un fichier est ouvert en mode Append, Binary, Output ou Random.

Si le fichier a déjà été ouvert par un autre processus et si le type d'accès indiqué n'est pas autorisé, l'instruction Open échoue et une erreur se produit.

La clause Len n'est pas prise en compte si l'argument mode a la valeur Binary.

Important   En mode Binary, Input et Random, vous n'êtes pas obligé de fermer un fichier avant de l'ouvrir sous un autre numéro de fichier. En mode Append et Output, vous devez fermer un fichier avant de l'ouvrir sous un autre numéro de fichier.

      L'instruction Open permet d'ouvrir un fichier, le type d'accès au fichier (principalement l'écriture ou la lecture), dépend du mode dans lequel il a été ouvert.

Format d'une instruction Open :
Open pathname For mode [Access access] [lock] As [#]filenumber [Len=reclength]

      Un fois le fichier ouvert, le fichier ne sera plus appelé par son nom, mais par #FileNumber. L'instruction la plus courte qui puisse ouvrir un fichier comporte au minimum le nom du fichier (pour savoir quel fichier nous ouvrons), et le #FileNumber qui permettra de l'identifier dans votre programme tant que ce fichier sera ouvert.

Open "Fichier.txt"  As  #1

       Ici, le fichier Fichier.txt est ouvert sous l'identification N°1. N'ayant pas de mode d'ouverture de précisé, le mode par défaut qui est utilisé est le mode Random (accès aléatoire), voir le tableau des Modes d'ouverture des fichiers expliqués ci-dessous.

La syntaxe de l'instruction Open comprend les éléments suivants :

Élément Description
pathname Expression de chaîne indiquant un nom de fichier — peut comprendre un nom de répertoire ou de dossier et un nom de lecteur.
mode Mot clé indiquant le mode d'ouverture du fichier : Append, Binary, Input, Output ou Random. S'il n'est pas indiqué, le fichier est ouvert en mode Random.
access Facultatif. Mot clé indiquant les opérations autorisées sur le fichier ouvert : Read, Write ou Read Write.
lock Facultatif. Mot clé indiquant les opérations restreintes sur le fichier ouvert par d'autres processus : Shared, Lock Read, Lock Write et Lock Read Write.
filenumber Numéro de fichier valide compris entre 1 et 511, inclus. Utilisez la fonction FreeFile pour obtenir le prochain numéro de fichier disponible.
reclength Facultatif. Nombre inférieur ou égal à 32 767 (octets). Pour les fichiers ouverts en mode Random, cette valeur représente la longueur de l'enregistrement. Pour les fichiers séquentiels, elle représente le nombre de caractères contenus dans la zone tampon.

Les Modes d'accès aux fichiers :

      L'argument "Mode" spécifie le mode d'accès au fichier. L'argument "Mode" n'est pas obligatoire dans une instruction Open, en cas d'absence de cet argument, Visual Basic traduira cette absence comme étant une ouverture en Mode Random.

Mode Description
Append Ouvre un fichier en écriture pour une sortie séquentielle, 
en commençant par la fin du fichier. Si le fichier n'existe pas, 
il est créé, mais jamais écrasé.
Binary Ouvre un fichier en accès binaire. Le fichier est ouvert en
  lecture et écriture en mode octet par octet.
Input Ouvre un fichier en mode séquentiel, les données sont lues 
dans l'ordre dans lequel elles ont été envoyées au fichier, en 
commençant par le début du fichier.
Output Ouvre un fichier en mode séquentielle, en commençant par le 
début du fichier. Si le fichier n'existe pas, il est créé, si il existe, il 
est écrasé.
Random Ouvre un fichier en lecture et écriture aléatoire. Les données
  peuvent être lues et écrites dans n'importe quel ordre.

Les Restrictions et les verrouillages :

      Les restrictions d'accès et le verrouillage des fichiers sont utilisés pour les applications réseau, cela a pour but d'éviter par exemple que plusieurs personnes modifient un même fichier en même temps.

AccessRestriction est un argument optionnel qui permet de restreindre l'exécution de l'instruction Open aux modes d'accès Read (lecture seule), Write (écriture seule) ou Read-Write (lecture et écriture).

LockType est un argument qui permet de verrouiller l'accès à un fichier, de sorte qu'un seul utilisateur à la fois puisse y accéder, ou le modifier. LockType peut prendre les valeurs :

  • Lock Read : Verrouille le fichier de sorte que seul l'utilisateur qui est en train de le lire y ai accès.
  • Lock Write : Verrouille le fichier de sorte que seul l'utilisateur qui est en train d'écrire y ai accès en écriture.
  • Lock Read Write : Verrouille le fichier de sorte que seul l'utilisateur qui est en train de le lire ou d'écrire y ai accès.
  • Shared : Déverrouille le fichier de sorte que plusieurs utilisateurs y ai accès en simultané.

    La Longueur d'enregistrement :
    Len
    est un argument pour les fichiers en accès aléatoire, qui définit la longueur des enregistrements de données qu'ils recevront du programme. Pour tous les accès aux fichiers en accès aléatoire, la taille des enregistrements de données doit être spécifier.
          Le premier enregistrement d'un fichier à accès séquentiel commence à la position 1, tous les suivant se trouvent à des positions incrémentées de 1.

    L'instruction CLOSE  
    Après avoir ouvert les fichiers, il vous faudra les refermer lorsque vous n'aurez plus besoin d'y accèder. Pour refermer un fichier, vous aurez recours à l'instruction CLOSE. L'instruction CLOSE n'accepte qu'un seul paramètre, qui est le #FileNum de l'instruction OPEN.

                CLOSE #1

          Il est également possible de fermer plusieurs fichiers à l'aide d'une seule instruction CLOSE, pour cela, il suffit d'ajouter à la suite tous les #FileNum des fichiers que vous voulez fermer, et séparés par une virgule.

                CLOSE #1, #3, #7

          Si aucun numéro #FileNum n'est spécifié, tous les fichiers ouverts seront fermés.

    L'instruction INPUT # :
    L'instruction Input # lit les données dans un fichier à accès séquentiel, et attribut chaque données à une variable. Les données lues avec Input # sont généralement des fichiers qui ont été écrit avec l'instruction Write #, ce qui permet une meilleur garantie dans la délimitation des champs de données.

          Supposons que dans un fichier de configuration "info.cfg" nous ayons :

                ("c:\temp", 12, "lecture")

           Pour lire les données nous utiliserons :

                Open "info.cfg" For Input As #1
                      Input #1, var1, var2, var3
                Close #1     ' Ferme le fichier.

          En supposant maintenant que vous ayez plusieurs séries de données dans la même construction que ci-dessus, nous dirons : "chemin" pour "c:\temp", "Nbre" pour "12" (nombre de fichier), et "type" pour "lecture" (type d'accès). Dans le fichier "info.cfg" nous avons sauvegardé tous les répertoires de notre disque. Pour relire les informations, nous utiliserons :

                Open "info.cfg" For Input As #1
                Text1.Text = Clear
                Do While Not EOF(1)
                      Input #1, chemin, Nbre, VarType
                      Text1.Text = Text1.Text & chemin & Nbre & VarType & vbCrLf
                Loop
                Close #1     ' Ferme le fichier.

          Dans l'exemple ci-dessus, chaque série s'affiche sur une ligne différente du TextBox Text1.

    L'instruction WRITE # :
    L'instruction Write # écrit les données dans un fichier à accès séquentiel. Les données écrites avec Write # sont généralement lues dans un fichier avec l'instruction Input #.

          Supposons que dans le fichier de configuration "info.cfg" ci-dessus, nous voulons écrire :

                ("c:\temp", 12, "lecture")

           Pour écrire les données nous utiliserons :

                Open "info.cfg" For Output As #1        ' Output pour écriture,
                      Write #1, "c:\temp", 12, "lecture"     ' et Input pour lecture.
                Close #1       ' Ferme le fichier.

          En supposant maintenant que vous ayez plusieurs séries de données à écrire :

                Open "info.cfg" For Output As #1
                     Write #1, "c:\temp", 12, "lecture"
                     Write #1, "c:\data", 18, "Modifier"
                     Write #1, "Drivers", 142, "lecture"
                 Close #1     ' Ferme le fichier.

          NOTA : L'instruction Write # insère un caractère de passage à la ligne (Chr(13) + Chr(10)), après l'écriture dans le fichier du dernier caractère de chaque instruction Write #.

    L'instruction PRINT # :
    L'instruction Print # vous permet d'écrire des données mises en forme dans un fichier à accès séquentiel. Il est possible pour la mise en forme d'écrire des espaces Spc(n), ou des tabulations Tab ou Tab(n).

                Open "Fiche.txt" For Output As #1
                      ' Écrit le texte dans le fichier.
                     
    Print #1, "Ceci est un fichier créé à titre d'essais"
                      Print #1,  ' Insère une ligne vierge dans le fichier.
                     
    Print #1, "Texte 1"; Tab ; "Texte 2"
                      Print #1, Spc(10);  "Écrit après 10 espaces"
                      Print #1, Tab ; "Écrit après 1 tabulation"
                      Print #1, Tab(3) ; "Écrit après 3 tabulations"
                 Close #1     ' Ferme le fichier.

          Si vous désirez écrire une chaîne complète, vous pouvez utiliser :

                      Print #1, TextBox.Text

    L'instruction LINE INPUT #  
    L'instruction Line Input # permet de lire une ligne unique à partir d'un fichier séquentiel ouvert, et attribue cette ligne à une variable de type String.

          Pour relire le fichier ci-dessus :

                Dim LigneText
                Open "Fiche.txt" For Input As #1         ' Ouvre le fichier.
                Text1.Text = Clear
                ' Lit en boucle jusqu'à la fin du fichier.
                
    Do While Not EOF(1)
                     
    Line Input #1, LigneText
                      Text1.Text = Text1.Text & LigneText & vbCrLf
                 Loop
                 Close #1     ' Ferme le fichier.

    Les fichiers aléatoires
    Les fichiers à accès aléatoire sont constitués d'enregistrements identiques contenant chacun un ou plusieurs champs, défini par l'utilisateur. Contrairement aux fichiers séquentiels, les fichiers à accès aléatoire peuvent être lus et écrits dans n'importe quel ordre. Les fichiers à accès aléatoire peuvent être utilisés pour la gestion de petites bases de données.

          Pour pouvoir utiliser un fichier à accès aléatoire, vous devrez comme pour les fichiers séquentiels, commencer par ouvrir le fichier à l'aide de l'instruction Open, puis le fermer en fin de traitement avec l'instruction Close.

          Exemple de Type défini par l'utilisateur, créant des enregistrements de 27 octets et composés de 3 champs :

                    Type Enrg
                         Nom As String * 10
                         Prenom As String * 10
                         Titre As String * 7
                   End Type

          Exemple d'ouverture d'un fichier en accès aléatoire :

                    Open "Fichier.txt" For Random As #1

                Si le mode d'accès n'est pas spécifié, VB adoptera le mode aléatoire par défaut. l'exemple ci-dessous a le même effet que l'exemple ci-dessus.

                    Open "Fichier.txt" As #1

    Les instruction Get # et Put #  
    Les instructions Put # et Get # sont pour l'accès aléatoire l'équivalent des instructions Print # et Input # de l'accès séquentiel. La différence est que pour Put # et Get # vous pourrez ne traiter qu'un enregistrement bien précis.

          Get # fileNum, recNum, Variable
    Permet de lire dans le fichier fileNum, l'enregistrement recNum, ayant les variables type prédéfini Variable.

          Put # fileNum, recNum, Variable
    Permet d'écrire dans le fichier fileNum, l'enregistrement recNum, ayant les variables type prédéfini Variable

Prochain Tutoriel : 
   

VisualBasic6.org est hébergé par Gilmir.com