VL - Fichiers

Fonctions portant sur les fichiers

en cours de création...

vl-directory-files Liste de fichiers
 vl-file-rename Renommer un fichier
vl-file-copy Copier un fichier
vl-file-delete Effacer un fichier
vl-file-size Taille d'un fichier
vl-file-systime Date d'un fichier
vl-filename-base Nom de fichier
vl-filename-directory Répertoire d'un fichier
vl-filename-extension Extension d'un fichier
 vl-filename-mktemp Créer fichier temporaire

vl-directory-files

Liste de fichiers

Cette fonction va créer une liste de tous les fichiers d'un répertoire (dossier)

Syntaxe : (vl-directory-files [RepReference Filtre OptionsRep])

Arguments :
RepReference : chaîne de caractères (string)
Nom du répertoire des fichiers à collecter si cet argument est nil ou absent (vl-directory-files) utilise le répertoire courant.

Filtre : chaîne de caractères (string)
Filtre générique valide pour le nom de fichier, s'il est nul ou absent, le filtre utilisé est "*. *" (tous types de fichiers)

OptionsRep : nombre entier (integer)
Valeur qui indique si la liste renvoyée doit inclure les noms de répertoire. les choix sont les suivants:
-1 Liste des dossiers seulement
0  Liste des fichiers et dossiers (par défaut)
1  Liste des fichiers seulement

Valeur renvoyée : une liste (list) ou nil si échec

Exemples :

Liste des fichiers DWG du répertoire dans lequel est le dessin courant

(vl-directory-files (getvar "dwgprefix") "*.dwg" 1)

Renvoie : ("Dessin1.dwg" "Dessin2.dwg" "Dessin3.dwg")
Bien sûr c'est un exemple, quand vous lancerez cette ligne de code c'est sans aucun doute autre chose qui sera renvoyé...

Liste des fichiers PDF du répertoire dans lequel est le dessin courant

(vl-directory-files (getvar "dwgprefix") "*.pdf" 1)

Renvoie : ("Galerie-Liaison-Plans.pdf" "Galerie-Liaison-Coupes.pdf")

Dans un chemin spécifié, y-a-t'il des fichiers DCL ?

(vl-directory-files "D:\\Didier\\AutoCAD\\_LISP\\da-code" "*.dcl" 1)

Renvoie : ("Alert_Perso.dcl" "BoutonsRadio.DCL" "Boutons_Radio_05.DCL" "Case-a-Cocher-01.DCL" "DCL1-Bis.DCL" )

 

Haut de page Retour menu Fonctions VL

 


 

vl-file-directory-p

Le nom en argument est-il un répertoire (dossier)

Syntaxe : (vl-file-directory-p Nom)

 


vl-file-rename

Renommer un fichier

 

Fonction qui va permettre de renommer un fichier... euh tu répètes le titre ?

Syntaxe : (vl-file-rename AncienNomFichier NouveauNomFichier)

Arguments :
AncienNomFichier  : Chaîne de caractères (string)
Nom du fichier que vous voulez renommer.

Si vous ne spécifiez pas de nom de chemin d'accès complet, (vl-file-rename) cherchera dans le répertoire de dessin par défaut.

NouveauNomFichier : Chaîne de caractères (string)
Nouveau du fichier à attribuer.

Valeur renvoyée :
T si le fichier est renommé
nil en cas d'échec

Exemple :
Renommer le fichier Dessin2.dwg qui est dans le répertoire "test" sur le disque "C:"

Définition des variables :

(setq AncienNom "c:/test/Dessin2.dwg")
(setq NouveauNom "c:/test/Dessin2_Renommé.dwg")
(vl-file-rename AncienNom NouveauNom)

Renvoie T, pour vérifier allez voir dans l'Explorer que le fichier est correctement renommé

Cette fonction ne semble pas sensible à la casse, car dessin2.dwg ou Dessin2.dwg reçoivent le même traitement.

Il sera utile de faire un test sur le nom de fichier avant de lancer la fonction (vl-file-rename) car si le fichier n'existe pas ou que le chemin présente un défaut ce n'est pas la peine de déclencher une erreur ou de recevoir un nil sans explication.

 

1
2
3
4
5
6
7
8
(setq AncienNom "c:/test/dessin2.dwg")
   (if (findfile AncienNom)
      (progn
         (setq NouveauNom "c:/test/Dessin2_Renommé.dwg")
         (vl-file-rename AncienNom NouveauNom)
      )
    (alert "fichier non trouvé")
)

 

Haut de page Retour menu Fonctions VL

 


 

vl-file-copy

Copier un fichier

 

Fonction qui va permettre de copier un fichier.

Syntaxe : (vl-file-copy NomFichierACopier FichierDestination [append])

Arguments :
NomFichierACopier : Chaîne de caractères (string)
Nom du fichier que vous voulez renommer.

Si vous ne spécifiez pas de nom de chemin d'accès complet, (vl-file-copy ) cherchera dans le répertoire de dessin par défaut.

FichierDestination: Chaîne de caractères (string)
Nouveau Fichier pour destination de la copie.

append : T ou nil
Si cet argument [facultatif ] est spécifié et non nil, le fichier source est ajouté au fichier de destination (c'est-à-dire, copié à la fin du fichier de destination).
Testé avec un fichier texte ça fonctionne mais avec un fichier DWG (binaire) ça ne fonctionne pas.

Valeur renvoyée :
Un nombre entier (integer) si le fichier est copié (a priori la taille du fichier)
nil en cas d'échec

Exemple :
Faire une copie du fichier Dessin2.dwg qui est dans le répertoire "test" sur le disque "C:" vers le fichier "Copie_Dessin2" dans le même répertoire (dossier).

Définition des variables :

(setq AncienNom "c:/test/Dessin2.dwg")
(setq NouveauNom "c:/test/Copie_Dessin2.dwg")
(vl-file-copy AncienNom NouveauNom)

Renvoie T, pour vérifier allez voir dans l'Explorer que le nouveau fichier a bien été copié.

Je me permets de vous conseiller la même vérification d'existence de fichier (findfile) que pour (vl-file-rename) mais avec cette fonction il faudra aussi vérifier la destination.
Ne pas oublier l'extension du fichier dans la destination, si vous l'omettez une copie sera quand même effectuée mais sans extension et ce fichier sans extension risque de ne pas être reconnu par le système.

Quelques raisons souvent constatées pour un échec de la fonction :

  • NomFichierACopier n'est pas lisible
  • FichierDestination est un répertoire
  • append est absent ou nil et FichierDestination  existe
  • FichierDestination ne peut pas être ouvert pour la sortie (protégé en écriture ?)
  • NomFichierACopier est le même que FichierDestination

 

Haut de page Retour menu Fonctions VL

 

vl-file-delete

Effacer un fichier

Tout est dans le titre

Syntaxe : (vl-file-delete NomFichier)

Argument : Un seul argument NomFichier
Nom du fichier que vous voulez supprimer.
Si vous ne spécifiez pas de nom de chemin d'accès complet, (vl-file-delete) cherchera dans le répertoire de dessin par défaut.
Si vous souhaitez effacer un fichier en dehors du répertoire du dessin courant il faudra donner le chemin complet dans NomFichier.

Valeur renvoyée :

T si le NomFichier est supprimé
nil si échec de la suppression NomFichier

Exemples :

Supprimer le fichier Dessin2.dwg qui est dans le répertoire "test" sur le disque "C:"

(setq NomFichier"c:/test/Dessin2.dwg")
(vl-file-delete NomFichier)

Renvoie T, pour vérifier allez voir dans l'Explorer que le nouveau fichier a bien été supprimé.

Supprimer le fichier DWG courant :

(setq nomfichier (getvar "dwgname"))
(vl-file-delete NomFichier)

Renvoie nil, suppression impossible.

 

Haut de page Retour menu Fonctions VL

 vl-file-size

Taille d'un fichier

Cette fonction donne la taille d'un fichier en octets.

Syntaxe : (vl-file-size NomFichier)

Argument : Un seul argument NomFichier
Nom du fichier dont vous souhaitez connaître la taille.
Si vous ne spécifiez pas de nom de chemin d'accès complet, (vl-file-size) cherchera dans le répertoire du dessin courant.
Si vous souhaitez interroger un fichier en dehors du répertoire du dessin courant il faudra donner le chemin complet dans NomFichier.

Valeur renvoyée :
Un nombre entier (integer) représentant la taille du fichier en octets
Si NomFichier n'est pas lisible c'est la valeur 0 (zéro) qui est renvoyée
Si NomFichier est un répertoire (dossier) c'est aussi la valeur 0 (zéro) qui est renvoyée
nil si échec

Je reprends mes exemples de fichiers précédents :

(setq NomFichier"c:/test/Dessin2.dwg")
(vl-file-size NomFichier)

Renvoie : 1619542 (voir explications complémentaires en bas de cette page)

S'il n'y a pas de fichier : Dessin1.dwg dans le répertoire (dossier) :

(setq NomFichier"c:/test/Dessin1.dwg")
(vl-file-size NomFichier)

Renvoie nil

Si NomFichier n'est pas un fichier mais un répertoire (dossier)

(setq NomFichier"c:/test")
(vl-file-size NomFichier)

Renvoie 0 (zéro)


Les octets, les kilo-octets et les autres ...ne pas perdre de vue qu'on calcule en base 2 et non en base 10 donc :
1 octet = 8 bit
1 kilo-octet (Ko)      = 1 024 octets
1 méga-octet (Mo)  = 1 024 Ko      = 1 048 576 octets
1 giga-octet (Go)     = 1 024 Mo     = 1 073 741 824 octets
1 téra-octet (To)      = 1 024 Go      = 1 099 511 627 776 octets

la croissance s'obtenant en multipliant par deux le nombre obtenu :
1-2-4-8-16-32-64-256-512-1024 ....

Pour obtenir en Ko un nombre d'octets il faut donc le diviser par 1024 :

(/ 1619542 1024)

Renvoie 1581 et donc le fichier "pèse" 1581 Ko.

Et si vous voulez un résultat en Mo (méga-octets) il faudra taper :

(/ 1619542.0 (* 1024 1024))

Ce qui renvoie : 1.54452 et donc le fichier "pèse" 1.544 Mo.

 

Haut de page Retour menu Fonctions VL

vl-file-systime

Date d'un fichier

 

Fonction qui renvoie la date du dernier enregistrement d'un fichier

Syntaxe : (vl-file-systime NomFichier)

Argument :

Argument : Un seul argument NomFichier
Nom du fichier dont vous souhaitez connaître la date du dernier enregistrement.
Si vous ne spécifiez pas de nom de chemin d'accès complet, (vl-file-systime) cherchera dans le répertoire du dessin courant.
Si vous souhaitez interroger un fichier en dehors du répertoire du dessin courant il faudra donner le chemin complet dans NomFichier.

Valeur renvoyée :
Une liste (list) composée de nombres entiers (integer)
nil
si échec

Notez la définition des éléments de cette liste , ce sont les suivantes :
Élément 1 : année
Élément 2 : mois
Élément 3 : jour de la semaine
Élément 4 : jour du mois
Élément 5 : heure
Élément6 : minutes
Élément 7: secondes
Élément 8: dixièmes de secondes

Notez aussi que le jour 1 est le lundi, le jour 2 est le mardi et ainsi de suite pour finir au jour 7 qui est le dimanche.

Exemple :

(setq NomFichier"c:/test/texte1.txt")
(vl-file-systime NomFichier)

Renvoie : (2018 4 1 30 9 34 11 40)

J'ai enregistré le fichier au moment où j'écris et nous sommes en 2018, le quatrième mois, le premier jour de la semaine, le trentième jour du mois, il est 9 heures, 34 minutes, 11 secondes et 40 dixièmes.
Et comme ça vous savez que je "fabrique" cette page la veille du premier mai.


Haut de page Retour menu Fonctions VL

 


vl-filename-base

Nom de fichier

Renvoie le nom d'un fichier, après avoir supprimé le chemin du répertoire et l'extension.
L'utilité de cette fonction reste à démontrer mais j'ai souhaité être exhaustif alors j'explique :

Syntaxe : (vl-filename-base NomFichier)

Argument : Un seul argument NomFichier

Valeur renvoyée : Chaîne de caractères (string) contenant le nom de fichier , tout répertoire et extension étant supprimés du nom.

Cette fonction ne vérifie pas si le fichier existe réellement

(vl-filename-base (getvar "dwgname"))

Renvoie  : Dessin2, le nom du dessin en cours sans l'extension ".dwg"

(vl-filename-base "C:\\Program Files\\Autodesk\\AutoCAD 2015\\acad.exe")

Renvoie : acad

Dans l'aide il est précisé que le nom de fichier est renvoyé en majuscules mais force est de constater que ce n'est pas vrai, croyez da-code mais pas toujours l'aide AutoDesk (là je suis gonflé !)

 

Haut de page Retour menu Fonctions VL

 

vl-filename-directory

Répertoire d'un fichier

Renvoie le nom du répertoire (dossier) contenant le fichier donné en argument.

Syntaxe : (vl-filename-directory NomFichier)

Argument : Un seul argument NomFichier

Valeur renvoyée : Chaîne de caractères (string) contenant le nom du répertoire (dossier) contenant NomFichier

Cette fonction ne vérifie pas si le fichier existe réellement.

Exemple :

(vl-filename-directory "c:/essai/essai1.dwg")

Renvoie : "c:/essai"

Cette fonction présente des dysfonctionnements, par exemple :
je suis dans le fichier "tempo.dwg" qui est dans le répertoire "c:\essai"

(vl-filename-directory (getvar "dwgname"))

Renvoie : "", une chaîne vide ! au lieu "c:/essai", surprenant !

je me permets de vous conseiller d'utiliser, pour obtenir ce genre de renseignements, d'interroger les variables "dwgprefix" et "dwgname"

Par exemple :

(getvar "dwgprefix")

Renvoie "C:\\essai\\"

(getvar "dwgname")

Renvoie : "tempo.dwg"

et pour finir :

(strcat (getvar "dwgprefix") (getvar "dwgname"))

Renvoie : "C:\\essai\\tempo.dwg"

 

 

Haut de page Retour menu Fonctions VL

 

vl-filename-extension

Extension d'un fichier

Encore une fonction à l'utilité douteuse mais on explique quand même !

Syntaxe : (vl-filename-extension NomFichier)

Argument : Un seul argument NomFichier

Valeur renvoyée : Chaîne de caractères (string) contenant l'extension du fichier donné en argument NomFichier

Cette fonction ne vérifie pas si le fichier existe réellement.

Exemple :

(vl-filename-directory "c:/essai/essai1.dwg")

Renvoie : ".dwg"

(vl-filename-extension (getvar "dwgname"))

Renvoie : ".dwg"

pour cet exemple je choisis en argument un nom de fichier qui n'existe pas dans un répertoire qui n'existe pas sur le disque C: et surprise ... :

(vl-filename-extension "c:/essai/essai1.dwg")

Renvoie : ".dwg", pas mal pour un fichier qui n'existe pas !

Donc l'utilité de cette fonction est à prouver car si elle ne vérifie pas l'existence du fichier et se contente d'extraire l'extension de ce qui est donné en argument : à quoi sert-elle réellement ?

 

Haut de page Retour menu Fonctions VL

vl-filename-mktemp

Créer fichier temporaire

Cette fonction va "inventer", "calculer" un nom de fichier unique à utiliser pour un fichier temporaire.
Une bonne solution pour créer des fichiers DCL pendant l'exécution d'un LSP alors que le fichier DCL, à proprement parler, n'existe pas.
Dans les exemples je ferai appel à cette fonction et je mettrai un lien quand ce sera fait, pour l'instant on "théorise"...

Syntaxe : (vl-filname-mktemp [NomFichier Repertoire Extension])

Arguments : les trois arguments sont facultatifs

NomFichier : Le nom du fichier à créer sachant que (vl-filname-mktemp) le tronquera à cinq caractères en y ajoutant une suite de trois numéros dans tous les cas, ceci pour finalement avoir un NomFichier de huit caractères.
S'il n'est pas fourni ce sera la valeur "$VL~~" suivi d'un numéro qui sera utilisée

Repertoire : Le répertoire (dossier) pour le fichier temporaire
Si nil ou absent, (vl-filname-mktemp) choisira un répertoire (dossier) dans l'ordre suivant :
- Le répertoire (dossier) signifié dans NomFichier si c'est le cas d'un chemin complet.
- Le répertoire (dossier) enregistré dans la variable d'environnement TMP
- Le répertoire (dossier) enregistré dans la variable d'environnement TEMP
- Le répertoire (dossier) courant.

Extension : L'extension souhaitée pour le fichier temporaire.
Si cet argument n'est pas renseigné, l'extension choisie sera celle exprimée dans NomFichier (s'il y en a une), sinon le fichier sera sans extension (ce qui dot être évité).

Exemples :

(vl-filename-mktemp)

Renvoie : "C:\\Users\\xxxx\\AppData\\Local\\Temp\\$VL~~001"

(vl-filename-mktemp "test.dcl")

Renvoie : "C:\\Users\\xxxx\\AppData\\Local\\Temp\\test009.dcl"

(vl-filename-mktemp "D:\\Didier\\test.dcl")

Renvoie : "D:\\Didier\\test00a.dcl", des numéros sont rajoutés à la fin

(vl-filename-mktemp "D:\\Didier\\ceci-est-le-nom-du-fichier-temporaire.dcl")

Renvoie : "D:\\Didier\\ceci-00b.dcl", le nom est tronqué

 

Haut de page Retour menu Fonctions VL

 

avril 2018