II. LES FONCTIONS DE RECHERCHE DE FICHIERS
Pour rechercher un fichier (ou un dossier), on se sert des fonctions 4eh
(« Find First ») et 4fh (« Find
Next »).
Imaginons par exemple que nous voulions chercher dans le dossier courant tous
les fichiers qui portent l'extension “.com” afin
de les supprimer. Comment devons-nous nous y prendre ?
1. La fonction 4eh
La fonction 4eh sert à définir des critères de
recherche et à trouver le premier fichier qui
correspond à ces critères (s'il existe).
On doit passer dans DS:DX l'adresse de la chaîne de caractères
qui contient le masque de recherche
(dans notre exemple, ce masque est “*.com”). Par
défaut, les fichiers sont cherchés dans le dossier
courant. Mais on peut évidemment spécifier un autre
chemin dans le masque.
Remarque importante : afin que le DOS puisse connaître sa
taille, le masque doit impérativement être terminé
par l'octet 00h !
On écrit également dans CX les attributs des fichiers que
l'on désire trouver. Si CX vaut 0, seuls les fichiers
« normaux » pourront être trouvés.
En fait, chaque bit de CL représente un attribut, comme le
montre le tableau ci-dessous :
Bit
|
Signification
|
1
|
Lecture seule
|
2
|
Fichier caché
|
3
|
Fichier système
|
4
|
Volume
|
5
|
Répertoire
|
6
|
Fichier
|
7
|
(Aucune...)
|
8
|
(Aucune...)
|
Pour demander à la fonction 4eh de ne pas oublier les fichiers
cachés, il suffit donc de charger CX avec la valeur 2 (bit
numéro 2 = 1). De même, l'attribut 00000111b
(soit 7) nous permettra de trouver les fichiers en lecture seule, les
fichiers cachés et les fichiers systèmes.
Remarque :
Ne vous souciez pas trop des bits numéro 4 et 6. Laissez-les à
0.
Une fois que les paramètres ont été
ajustés, on peut appeler la fonction 4eh. Si aucun fichier
n'a été trouvé, le flag CF est mis à 1.
On doit donc fait un test sur CF pour savoir
si la recherche peut continuer ou si elle doit s'arrêter.
Si au contraire la fonction a trouvé un fichier, les
caractéristiques de ce fichier (i.e. son nom, sa taille, ses
attributs,...) sont inscrits dans une zone de la mémoire
appelée DTA (« Disk
Transfer Area »).
Mais où se trouve donc cette DTA et à quoi
ressemble-t-elle ?
Réponse :
par défaut, le DOS place la DTA dans le PSP de votre
programme, à l'offset 80h.
Remarque :
il vous est naturellement possible de la déplacer en faisant
appel à la fonction 1ah.
Voici la structure de la DTA :
Adresse
|
Description
|
Taille (octets)
|
00h
|
Lettre du lecteur (0=courant, 1=A, 2=B, ...) sur lequel se trouve le fichier
|
1
|
01h
|
Modèle de la recherche
|
11
|
0Ch
|
Réservé
|
9
|
15h
|
Attributs du fichier
|
1
|
16h
|
Heure du fichier
|
2
|
18h
|
Date du fichier
|
2
|
1Ah
|
Taille du fichier
|
4
|
1Eh
|
Nom du fichier avec l'extension
|
13
|
Puisque par défaut la DTA est située dans le PSP à
l'offset 80h, le nom du fichier trouvé est écrit à
l'offset 80h + 1eh = 9eh. De même, la taille se trouve à
l'offset 9ah, etc...
2. La fonction 4fh
Jusqu'à présent, nous n'avons trouvé qu'un seul fichier !
Pour poursuivre la recherche, appelez la fonction 4fh sans écrire
aucun paramètre dans les registres. Les caractéristiques
de votre recherche ont été mémorisées
dans la DTA : vous n'avez donc pas à les rappeler. De
même que pour la fonction 4eh, CF est mis à 1 si aucun
nouveau fichier n'a été trouvé. C'est le signe
que vous pouvez arrêter votre recherche.
3. Conclusion
Résumons nous :
Fonction
|
Description
|
Paramètres
|
4eh
|
Trouver le premier fichier qui correspond aux caractéristiques
spécifiées
|
- DS:DX : adresse d'une chaîne contenant le masque
- CX : attributs
|
4fh
|
Trouver
le prochain fichier
|
Aucun !
|
A titre d'exemple, écrivons à présent le programme
que nous évoquions tout à l'heure :
“trouver tous les fichiers COM du dossier courant et les
effacer”.
Sommaire
Suite
|