Les Files, enfin les fichiers quoi !
Non je ne parlais pas de splendides créatures aux formes délicates ! Hop hop hop, on reste quand même, c'est intéressant de savoir à quoi ça sert.
Tout le monde connait et utilise les .ini (sinon vous le ferai bientôt), et bien les commandes File servent pour tout les autres types de fichiers (.txt en autres).
On ne va pas voir toutes les fonctions présentes dans autoIt, sinon demain on y est encore... en voici la liste :
FileChangeDir, FileClose, FileCopy, FileCreateNTFSLink, FileCreateShortcut, FileDelete, FileExists, FileFindFirstFile, FileFindNextFile, FileGetAttrib, FileGetLongName, FileGetShortName, FileGetShortcut, FileGetSize, FileGetTime, FileGetVersion, FileInstall, FileMove, FileOpen, FileOpenDialog, FileRead, FileReadLine, FileRecycle, FileRecycleEmpty, FileSaveDialog, FileSelectFolder, FileSetAttrib, FileSetTime, FileWrite, FileWriteLine
En jaune, ce sont les fonctions dont je vais vous parler.
Et oui quand même, ça en fait un sacré liste... Nous n'allons voir que les principales. Si vous voulez toutes les connaître, je vous invite à lire la doc en anglais disponible içi.
Tout d'abord, à quoi sert de crée un fichier texte dans un bot ?
A faire une sauvegarde de paramètres par exemple. Comme dans un .ini. Pas tout à fait, dans un .ini vous enregistrer des valeurs de variables que vous pourrez réutilisé plusieurs fois dans votre bot. Avec les fonctions File, vous pouvez crée tout les types de fichiers un .txt, un .sav, un .bat, un .au3, un .cpp et même un .ini ! File est très puissant, mais est beaucoup moins maniable qu'un .ini .
I. FileOpen & FileClose
a/ FileOpen
Comme vous pouvez vous en douter, cette fonction va permettre d'ouvrir un fichier.
$file = FileOpen ( "filename", mode )
Alors $file est la variable représentant votre fichier. On ne travail pas directement sur un fichier, on travail sur une variable. Qui est reconnu comme une variable de type fichier lorsqu'on affecte un fileOpen à cette varaible.
filename est le nom du fichier ainsi que son emplacement, si vous mettez juste le nom du fichier, le script cherchera dans le dossier où votre script est sauvegardé. Si vous mettez l'emplacement, pensez à partir de la racine (C:\ ou D:\ sous windows, / sous unix).
Il reste mode. C'est le plus important puisque cette option permet de définir comment votre fichier sera ouvert : juste en mode lecture, en lecture et ecriture, en supprimant l'ancien contenu puis en écrivant par dessus, etc...
Voici les modes que vous utiliserez :
0 = lecture.
1 = ecriture, en continuité de ce qu'il y avait avant.
2 = ecriture, ecrase le contenu précédent.
8 = crée le fichier s'il n'existe pas.
On peut combiner 2 modes, par exemple en utilisant :
$file = FileOpen ( "filename", 10 )
Içi 10 correspond à 8 + 2, ce que je vous conseil d'utiliser si vous voulez crée un fichier. On supprime l'ancien contenu s'il existe, sinon on crée le fichier.
Si $file = -1, celà veut dire qu'il y a eu un problème lors de l'ouverture du fichier. Suivant le mode utilisé celà peut dire que le fichier n'existe pas ou que vous n'avez pas les droits d'accès.
b/ FileClose
Si vous ouvrez un fichier, attention à bien TOUJOURS le fermer à un moment donné dans votre script! C'est une habitude à prendre qui permet de limiter la mémoire utilisé et d'écrire un jolie code.
Voici la structure d'un FileClose :
FileClose($file)
On ne ferme pas directement le fichier, on "ferme" la variable correspondante à mon fichier!
FileClose("test.txt") est INTERDIT.
II. FileRead & FileWrite
Si vous pensiez écrire dans un fichier avec une affectation toute simple vous vous ètes fourrer le doigt dans l'oeil!
a/ FileRead
$chars = FileRead( filevar, count )
filevar correspond à la variable qui a "stockée" le fichier.
count quant à lui indique le nombre de caractères que la fonction doit lire. Par défault, elle lit tout le fichier.
$file = FileOpen("test.txt", 0)
;Lire 1 caractère (le premier) de test.txt
$chars = FileRead($file, 1)
MsgBox(0, "Caractère lu :", $chars)
FileClose($file)
Bon ce code est un peu léger car il ne vérifie pas si le fichier existe.
La sortie d'erreur de FileRead est : @error = -1
b/ FileWrite
Et si on écrivais dans ce fichier maintenant ?
FileWrite($file, "blablablabla.(ligne 1)")
FileWrite($file, @CRLF)
FileWrite($file, "blablablabla.(ligne 2)")
Donc il faut bien sûr ouvrir le fichier avant et le fermer après.
Le @CRLF correspond à une retour à ligne.
/!\ Attention : Si vous avez ouvert le fichier en mode 1 (écriture à la suite), le curseur d'écriture se placera au dernier emplacement possible. Pensez à ajouter un @CRLF en début d'écriture si le retour à la ligne n'existe pas à la fin de votre fichier.
III. FileDelete & FileCopy
a/ FileDelete
Si on peut crée un fichier, on peut aussi le supprimer. Cependant je vous conseil de l'utilisé avec prudence. Une fausse manipulation est vite arrivé.
FileDelete ( "\test.txt" )
Il faut donc définir l'emplacement du fichier ainsi que son nom complet.
Malheureusement il est aussi possible de faire ça :
FileDelete("D:\*.tmp")
Je n'ai pas testé, mais je suis presque sur que ce bout de code supprime tout les fichiers d'extension .tmp de D:\ ...
Le caractère *, comme dans les invites de commande, sera remplacé par toutes les chaînes de caractères possibles et de n'importe quel longueur. * équivaudrait aussi bien à anticonstitutionnellement qu'à e où qu' à aze4rtyui5op8.
Faites donc très ATTENTION quand vous utilisez un FileDelete.
b/ FileCopy
FileCopy ( "source", "destination", mode)
Comme on peut s'y attendre, on met en premier le fichier à copier qui correspond à "source".
Dans "destination" on met le lieu de destination de la copie, un fichier bien entendu. C'est le contenu du fichier qui est copier.
Le mode permet d'avoir quelques options sur la copie, notament de crée le répertoire du lieu de la copie.
0 = par défault, ne remplace pas les fichiers si ceux-ci existe déjà dans le dossier de destination.
1 = remplace les fichiers.
8 = crée le répertoire s'il il n'existe pas.
Voici quelque exemple
;une copie de fichier normal
FileCopy("C:\Programmation\*.au3", "D:\SauvegardeC\Programmation\*.*")
;avec cette instruction, le fichier de destination aura le même nom et la même extension que le fichier source
; Méthode pour copier un dossier avec ce qu'il contient.
DirCreate("C:\new")
FileCopy("C:\old\*.*", "C:\new\")
Bien sûr on peut combiner 1 et 8 en 9 :
FileCopy("C:\Temp\*.txt", "C:\Temp\TxtFiles\", 9)
Cela va copier les fichier txt depuis Temp dans TxtFiles et recopie les fichiers sources avec le même nom dans le dossier Txtfiles.
V. FileFindFirstFile & FileFindNextFile
a/ FileFindFirstFile
$search = FileFindFirstFile("filename")
Permet la recherche d'un fichier dont le nom est connu ou partiellement connu.
filename peut contenir un chemin "C:\Tmp\cadernis.free.fr\*.htm" comme un fichier simple "save.txt"
Les * et les ? sont acceptés.
Comme vu plus haut * sera remplacé par une chaîne de caractères quelconques et de longueurs quelconques.
Tandis que ? sera remplacé par n'importe quelle caractères.
"*.au?" donnera tout les fichiers dont l'extension comporte 3 carcatères et dont les 2 premiers sont au, le troisième correspondant à n'importe lequel.
b/ FileFindNextFile
Va de pair avec FilefindFirstFile. Il correspond à la recherche du fichier suivant.
FileFindNextFile ($search)
$search correspond à la variable de votre requête $search = FileFindFirstFile("filename").
vous pouvez par exemple lister tout les fichier d'un répertoire en inserant FileFindNextFile dans une boucle while 1. Quand le code d'erreur apparaît faite un ExitLoop.
VI. FileReadLine &FileWriteLine
a/ FileReadLine
FileReadLine ( $file, numero)
Permet de lire la ligne numéro X de votre fichier. On n'est pas obligé de donner un numéro de ligne. Dans ce cas là, la fonction lira la ligne suivante de celle lu avant. Si le fichier vient juste d'être ouvert, elle lira la première ligne.
Attention les lignes d'un fichier commence à 1 et non pas à 0.
b/ FileWriteLine
Cette fonction est plus pratique que FileWrite car elle ajoute automatiquement un retour à la ligne si vous ne le mettez pas.
FileWriteLine ( filehandle, "ce que doit ecrire la fonction" )
Attention, cette fonction ne permet pas d'ecrire à un ligne précise. Elle ecrit une ligne précise, dont l'emplacement dépend du mode d'ouverture de votre fichier avec FileOpen. (en début avec un FileOpen("test.txt", 2), à la suite avec FileOpen("test.txt", 1))
Il existe d'autre fonction, notamment FileInstall ou FileCreateShortcut mais je ne les connais pas, à vous de chercher comment les utiliser pour en faire un tuto! Pour moi par exemple :p
Bon Voilà, ce tuto est fini. Je vous remercie d'avoir suivi en entier mon cours. Comme c'est mon premier, n'exitez pas à critiquer dans la section adapté!
Je me suis basé sur la docs en anglais dispo içi. Cela peut vous paraître inutile si vous avez déjà feuilleté la docs mais sait-on jamais si je vous éclaici un point difficile tant mieux sinon à vous de me faire remarquer ce que j'ai mal compris.
Par : Zts-pasthck