Fichiers et répertoires (bibliothèque d'exécution de Apache OpenOffice)

From Apache OpenOffice Wiki
Jump to: navigation, search
doc OOo
Book.png

L'utilisation des fichiers est une des tâches de base d'une application. L'API Apache OpenOffice fournit un grand nombre d'objets permettant de créer, d'ouvrir et de modifier des documents Office. Ils sont présentés en détail au chapitre Introduction à l'API Apache OpenOffice. Indépendamment de cela, il peut parfois s'avérer nécessaire d'accéder directement au système de fichiers, d'effectuer des recherches dans les répertoires ou d'éditer des fichiers texte. La bibliothèque d'exécution de Apache OpenOffice Basic fournit plusieurs fonctions fondamentales pour ces tâches.

Documentation note.png Certaines fonctions spécifiques à DOS pour les fichiers et les répertoires ne sont plus proposées par Apache OpenOffice, ou seulement avec des fonctionnalités limitées. Par exemple, les fonctions ChDir, ChDrive et CurDir ne sont plus prises en charge. Certaines propriétés spécifiques à DOS ne sont plus utilisées dans les fonctions utilisant des propriétés de fichier comme paramètres (par exemple, pour distinguer les fichiers cachés et les fichiers système). Cette évolution était devenue nécessaire pour assurer une indépendance maximum de Apache OpenOffice par rapport aux différentes plates-formes.

Administration des fichiers

Recherche dans les répertoires

La fonction Dir de Apache OpenOffice Basic permet de parcourir les répertoires et sous-répertoires pour y rechercher de fichiers. Lors de la première requête, vous devez assigner une chaîne contenant le chemin des répertoires dans lesquels effectuer la recherche comme premier paramètre de la fonction Dir. Le second paramètre de la fonction Dir spécifie le fichier ou le répertoire à rechercher. Apache OpenOffice Basic retourne le nom de la première entrée de répertoire trouvée. Pour obtenir l'entrée suivante, vous devez appeler la fonction Dir sans lui passer de paramètres. Si la fonction Dir ne trouve pas d'entrée supplémentaire, elle retourne une chaîne vide.

L'exemple suivant illustre l'utilisation de la fonction Dir pour obtenir la liste des fichiers d'un répertoire. Les différents noms de fichier sont enregistrés dans la variable AllFiles, puis celle-ci s'affiche dans une boîte de message.

Sub ShowFiles
  Dim NextFile As String
  Dim AllFiles As String
 
  AllFiles = ""
  NextFile = Dir("C:\", 0)
 
  While NextFile  <> ""
    AllFiles = AllFiles & Chr(13) &  NextFile 
    NextFile = Dir
  Wend
 
  MsgBox AllFiles
End Sub

Le 0 (zéro) utilisé comme second paramètre de la fonction Dir indique à Dir de ne retourner que les noms des fichiers et d'ignorer les répertoires. Vous pouvez spécifier ici les paramètres suivants :

  • 0 : retourne les fichiers normaux ;
  • 16 : sous-répertoires.

L'exemple suivant est pratiquement identique au précédent, si ce n'est que la fonction Dir est appelée avec une valeur 16 en paramètre et retourne donc les sous-répertoires d'un dossier et non plus les noms des fichiers.

Sub ShowDirs
  Dim NextDir As String
  Dim AllDirs As String
 
  AllDirs = ""
  NextDir = Dir("C:\", 16)
 
  While NextDir <> ""
    AllDirs = AllDirs & Chr(13) &  NextDir
    NextDir  <nowiki>= Dir</nowiki>
  Wend
 
  MsgBox AllDirs
End Sub
Documentation note.png Lorsqu'elle est appelée dans Apache OpenOffice Basic, la fonction Dir utilisée avec le paramètre 16 retourne uniquement les sous-répertoires d'un dossier. Dans VBA, la fonction retourne également les noms des fichiers standard, ce qui oblige à opérer un traitement supplémentaire pour n'obtenir que les répertoires. Lorsque la fonction CompatibilityMode ( true ) est utilisée, Apache OpenOffice Basic, utilisé avec le paramètre 16, se comporte comme les fonctions VBA et Dir, et retourne des sous-répertoires et des fichiers standard.
Documentation note.png Les options proposées par VBA pour rechercher dans des répertoires uniquement les fichiers possédant les propriétés caché, fichier système, archive et nom de volume n'existent pas dans Apache OpenOffice Basic, car les fonctions de système de fichiers correspondantes n'existent pas dans tous les systèmes d'exploitation.
Documentation note.png Les indications de chemin utilisées avec la fonction Dir peuvent contenir les substituants * et ? dans VBA comme dans Apache OpenOffice Basic. Cependant, dans Apache OpenOffice Basic, le substituant * ne peut être que le dernier caractère du nom d'un fichier ou de son extension, ce qui n'est pas le cas dans VBA.

Création et suppression de répertoires

Dans Apache OpenOffice Basic, la fonction MkDir permet de créer des répertoires.

MkDir ("C:\SubDir1")

Cette fonction crée des répertoires et des sous-répertoires. Tous les répertoires nécessaires à la hiérarchie sont également créés, le cas échéant. Par exemple, si seul le répertoire C:\SubDir1 existe, l'appel :

MkDir ("C:\SubDir1\SubDir2\SubDir3\")

crée à la fois le répertoire C:\SubDir1\SubDir2 et le répertoire C:\SubDir1\SubDir2\SubDir3.

La fonction RmDir supprime des répertoires.

RmDir ("C:\SubDir1\SubDir2\SubDir3\")

Si le répertoire contient des sous-répertoires ou des fichiers, ceux-ci sont également supprimés. Par conséquent, utilisez la fonction RmDir avec prudence.

Documentation note.png Dans VBA, les fonctions MkDir et RmDir ne s'appliquent qu'au répertoire actif. En revanche, dans Apache OpenOffice Basic, les fonctions MkDir et RmDir peuvent servir à créer ou à supprimer plusieurs niveaux de répertoires.
Documentation note.png Dans VBA, RmDir génère un message d'erreur lorsqu'un répertoire contient un fichier. Dans Apache OpenOffice Basic, le répertoire et tous ses fichiers sont supprimés. Si vous utilisez la fonction CompatibilityMode ( true ), Apache OpenOffice Basic se comporte comme VBA.

Copie, attribution d'un nouveau nom, suppression et vérification de l'existence de fichiers

L'appel suivant crée une copie du fichier Source sous le nom de Destination :

FileCopy(Source, Destination)

La fonction suivante permet de remplacer le nom de fichier OldName par NewName. Le mot clé As et l'absence de virgule remontent aux origines du langage Basic.

Name OldName As NewName

L'appel suivant supprime le fichier Filename. Pour supprimer un répertoire (avec tous ses fichiers), utilisez la fonction RmDir.

Kill(Filename)

Vous pouvez utiliser la fonction FileExists pour vérifier l'existence d'un fichier :

If FileExists(Filename) Then 
  MsgBox "file exists."
End If

Lecture et modification des propriétés d'un fichier

Parfois, il est nécessaire de connaître les propriétés des fichiers utilisés, par exemple la date de leur dernière modification et leur longueur.

L'appel suivant retourne des propriétés relatives à un fichier.

Dim Attr As Integer
Attr = GetAttr(Filename)

La valeur de retour est fournie sous la forme d'un masque de bits qui peut prendre les valeurs suivantes :

  • 1 : fichier en lecture seule ;
  • 16 : nom d'un répertoire.

L'exemple suivant identifie le masque de bits du fichier test.txt et détermine s'il est en lecture seule ou s'il s'agit d'un répertoire. Si aucun de ces deux cas ne s'applique, FileDescription reçoit la chaîne "normal".

Dim FileMask As Integer
Dim FileDescription As String
 
FileMask = GetAttr("test.txt")
 
If (FileMask AND 1) > 0 Then
  FileDescription = FileDescription & " read-only "
End IF
 
If (FileMask AND 16) > 0 Then
  FileDescription = FileDescription & " directory "
End IF
 
If FileDescription = "" Then
  FileDescription = " normal "
End IF
 
MsgBox FileDescription
Documentation note.png Les drapeaux utilisés dans VBA pour obtenir les propriétés de fichier caché, fichier système, archivé et nom de volume ne sont pas pris en charge par Apache OpenOffice Basic, car ils sont propres à Windows et ne sont pas disponibles dans les autres systèmes ou pas complètement.

La fonction SetAttr permet de modifier les propriétés d'un fichier. Vous pouvez donc définir un fichier comme étant en lecture seule à l'aide de l'appel suivant :

SetAttr("test.txt", 1)

L'appel suivant permet de supprimer un statut de lecture seule :

SetAttr("test.txt", 0)

Il est possible d'obtenir la date et l'heure de la dernière modification d'un fichier à l'aide de la fonction FileDateTime. La date est formatée ici selon les paramètres régionaux utilisés sur le système.

FileDateTime("test.txt")   ' Provides date and time of the last file amendment.

La fonction FileLen détermine la longueur d'un fichier en octets (au format entier long).

FileLen("test.txt")      ' Provides the length of the file in bytes

Écriture et lecture de fichiers texte

Apache OpenOffice Basic fournit un large éventail de méthodes permettant de lire et d'écrire des fichiers. Les explications suivantes concernent l'utilisation de fichiers texte (et non de documents texte).

Écriture de fichiers texte

Pour accéder à un fichier texte, vous devez d'abord l'ouvrir. Pour ce faire, il faut un descripteur de fichier libre, qui identifie clairement le fichier pour les accès ultérieurs.

La fonction FreeFile sert à créer un descripteur de fichier libre. Ce descripteur est passé comme paramètre à l'instruction Open, qui ouvre le fichier. Pour ouvrir un fichier de manière à pouvoir le spécifier comme fichier texte, l'appel Open est :

Open Filename For Output As #FileNo

Filename est une chaîne de caractères contenant le nom du fichier. FileNo est le descripteur créé par la fonction FreeFile.

Une fois le fichier ouvert, vous pouvez décrire l'instruction Print ligne par ligne :

Print #FileNo, "This is a test line."

FileNo désigne ici aussi le descripteur de fichier. Le second paramètre spécifie le texte à enregistrer comme ligne du fichier texte.

Une fois le processus d'écriture achevé, le fichier doit être refermé avec un appel Close :

Close #FileNo

Là encore, il faut spécifier le descripteur du fichier.

L'exemple suivant illustre l'ouverture, la description et la fermeture d'un fichier texte :

Dim FileNo As Integer
Dim CurrentLine As String
Dim Filename As String
 
Filename = "c:\data.txt"            ' Define file name 
FileNo = Freefile               ' Establish free file handle
 
Open Filename For Output As #FileNo         ' Open file (writing mode)
Print #FileNo, "This is a line of text"      ' Save line 
Print #FileNo, "This is another line of text"   ' Save line 
Close #FileNo                  ' Close file

Lecture de fichiers texte

Les fichiers texte sont lus de la même manière qu'ils sont écrits. L'instruction Open utilisée pour ouvrir le fichier contient l'expression For Input à la place de l'expression For Output et, au lieu de la commande Print permettant d'écrire des données, c'est la commande Line Input qui est utilisée pour lire les données.

Enfin, lorsque vous accédez à un fichier texte, l'instruction eof permet de déterminer si la fin de fichier a été atteinte :

eof(FileNo)

L'exemple suivant illustre la lecture d'un fichier texte :

Dim FileNo As Integer
Dim CurrentLine As String
Dim File As String
Dim Msg as String
 
' Define filename 
Filename = "c:\data.txt"
 
' Establish free file handle
FileNo = Freefile
 
' Open file (reading mode)
Open Filename For Input As FileNo
 
' Check whether file end has been reached
Do While not eof(FileNo)
  ' Read line 
  Line Input #FileNo, CurrentLine   
  If CurrentLine <>"" then
    Msg = Msg & CurrentLine & Chr(13)
  end if
Loop
 
 
' Close file 
 
Close #FileNo               
Msgbox Msg

Les différentes lignes sont extraites dans une boucle Do While, enregistrées dans la variable Msg, puis affichées à la fin dans une boîte de message.

Content on this page is licensed under the Public Documentation License (PDL).
Personal tools