Chapitre 17 - Commandes système▲
Tout comme sous Dos ou Windows, il est quelquefois nécessaire de créer des répertoires, de déplacer des fichiers… Turbo Pascal 7.0 propose un certain nombre de procédures et fonctions permettant ces manipulations. Certaines d'entre elles seront discutées au cours de ce chapitre.
Les instructions suivantes nécessitent l'unité Dos.
Répertoires et lecteurs▲
MkDir▲
MkDir (s);
Procédure qui crée le sous-répertoire s (qui est une variable de type String) dans le lecteur et répertoire courant.
RmDir▲
RmDir (s);
Procédure qui supprime le sous-répertoire s (qui est une variable de type String) dans le lecteur et répertoire courant. Le sous-répertoire en question doit être vide.
ChDir▲
ChDir (s);
Procédure qui change de répertoire courant pour aller dans le répertoire s (qui est une variable de type String). Ce dernier doit bien entendu exister.
GetDir▲
GetDir (b, s);
Procédure qui renvoie le répertoire courant dans la variable s (de type String) du lecteur b (spécifié en Byte).
Valeur |
Lecteur |
---|---|
0 |
Lecteur courant |
1 |
À: |
2 |
B: |
3 |
C: |
… etc. |
Exemple récapitulatif▲
Program
Exemple16;
Uses
Dos;
Var
s, r, t : String
;
i : Integer
;
BEGIN
GetDir(0
,s);
Writeln('Lecteur et répertoire courant: '
,s);
{$I-}
Write
('Aller dans quel répertoire ? -> '
);
ReadLn(r);
for
i := 1
to
Length(r) do
r[i] := UpCase(r[i]);
ChDir(r);
if
IOResult <> 0
then
begin
Write
(r,' n''existe pas, voulez-vous le créer [o/n] ? -> '
);
Readln(s);
if
(s = 'o'
) or
(s = 'O'
) then
begin
MkDir(r);
WriteLn('Création de '
,r);
end
;
end
else
Writeln('Ok : '
,r,' existe !'
);
ReadLn;
ChDir(s);
END
.
Ce programme Exemple16 affiche le répertoire courant du disque courant et propose à l'utilisateur de changer de répertoire. Si le répertoire choisi n'existe pas, il le crée.
DiskFree▲
DiskFree (b);
Fonction qui retourne, dans une variable de type LongInt, la taille libre (en octets) du disque se trouvant dans le lecteur b (variable de type Byte).
Le type LongInt limite la taille maximale gérable à 2 Gb, ce qui est très inférieur aux tailles de disque actuelles !
DiskSize▲
DiskSize (b);
Fonction qui retourne dans une variable de type LongInt la capacité totale exprimée en octets du disque spécifié b (de type Byte).
La limitation à 2 Gb mentionnée ci-dessus est également valable pour cette fonction.
Program
Exemple17;
Uses
Dos;
BEGIN
Writeln(DiskSize(0
),' octets'
);
Writeln(DiskSize(0
) div
1024
,' kilo octets'
);
Writeln(DiskSize(0
) div
1048576
,' méga octets'
);
Writeln(DiskSize(0
) div
1073741824
,' giga octets'
);
END
.
Ce programme Exemple17 affiche à l'écran la capacité totale du disque dur, dans les différentes unités usuelles.
Rappelons que le coefficient multiplicateur entre les différentes unités est de 1024 : 1 kilo octet = 1024 octets, 1 méga octet = 1024 kilo octets, etc.
Environnement MS-DOS▲
DosVersion▲
DosVersion;
Fonction qui retourne le numéro de version du système d'exploitation MS-DOS présent dans le système sous la forme d'une variable de type Word.
Program
Exemple18;
Uses
Dos;
Var
Version : Word
;
BEGIN
Version := DosVersion;
WriteLn('MS-DOS version : '
,Lo(Version),'.'
,Hi(Version));
END
.
Ce programme Exemple18 affiche le numéro de la version de MS-DOS, correctement formatée avec les fonctions Lo et Hi qui renvoient respectivement le byte inférieur et supérieur de l'information contenue dans la variable Version.
DosExitCode▲
DosExitCode;
Fonction qui renvoie le code de sortie d'un sous-processus sous la forme d'une variable de type Word.
Valeur |
Signification |
---|---|
0 |
Sortie sans erreur |
1 |
Sortie par Ctrl-C |
2 |
Device error |
3 |
Procédure Keep (TSR) |
EnvCount et EnvStr▲
EnvCount;
Fonction qui renvoie, sous la forme d'une variable de type Integer, le nombre de chaines de caractères contenues dans l'environnement MS-DOS.
EnvStr (i);
Fonction qui renvoie, sous la forme d'une variable de type String, la chaine de caractères contenue dans l'environnement MS-DOS à la position dans l'index spécifiée par la variable i (de type Integer).
Program
Exemple19;
Uses
Dos;
Var
i : Integer
;
BEGIN
for
i := 1
to
EnvCount do
WriteLn(EnvStr(i));
END
.
Ce programme Exemple19 affiche l'intégralité des variables d'environnement MS-DOS à l'aide d'une boucle.
GetCBreak et SetCBreak▲
GetCBreak (Break);
Procédure qui permet de connaître la valeur (true ou false) de la variable Break de MSDOS. Avec Break de type Boolean.
SetCBreak (Break);
Procédure qui permet de fixer la valeur (true ou false) de la variable Break de MSDOS. Avec Break de type Boolean.
Fichiers▲
DosError▲
DosError est une variable interne de l'unité Dos qui contient le code d'erreur renvoyé par MS-DOS lors de la dernière opération qui lui a été demandée.
Voici les codes d'erreur les plus fréquents :
Valeur |
Description |
---|---|
0 |
Pas d'erreur |
2 |
Fichier non trouvé |
3 |
Répertoire non trouvé |
5 |
Accès refusé |
6 |
Procédure non valable |
8 |
Pas assez de mémoire |
10 |
Environnement non valable |
11 |
Format non valable |
18 |
Plus de fichiers |
SetFAttr et GetFAttr▲
SetFAttr (f, Attr);
Procédure qui attribue au fichier f la variable Attr (de type Word).
GetFAttr (f, Attr);
Procédure qui renvoie dans la variable Attr (de type Word) la valeur de l'attribut du fichier f.
Les attributs de fichiers sont les suivants :
Valeur |
Nom |
Description |
---|---|---|
$01 |
ReadOnly |
Lecture seule |
$02 |
Hidden |
Caché |
$04 |
SysFile |
Système |
$08 |
VolumeID |
VolumeID |
$10 |
Directory |
Répertoire |
$20 |
Archive |
Archive |
$3F |
AnyFile |
tous |
FExpand▲
FExpand (Fichier);
Fonction qui rajoute le chemin d'accès du fichier spécifié dans le nom de ce fichier. La variable Fichier doit être de type PathStr,mais vous pouvez entrer directement une chaine de caractères.
FSplit▲
FSplit (Fichier, Dir, Name, Ext);
Procédure qui découpe un nom de fichier (Fichier) de type PathStr en ses trois composantes :
- chemin (Dir), de type DirStr;
- nom (Name), de type NameStr;
- extension (Ext), de type ExtStr.
Program
Exemple20;
Uses
Dos;
Var
P : PathStr;
D : DirStr;
N : NameStr;
E : ExtStr;
BEGIN
Write
('Entrez un nom complet de fichier : '
);
Readln(P);
FSplit(P,D,N,E);
Writeln('Son chemin : "'
,D,'", son nom : "'
,N, '" et son extension : "'
,E,'".'
);
END
.
Ce programme Exemple20 demande à l'utilisateur d'entrer un nom de fichier avec son chemin, et il affiche séparément toutes les informations : le chemin, le nom et l'extension.
FileSize▲
FileSize (f);
Fonction qui renvoie, sous la forme d'une variable LongInt, la taille du fichier f.
L'utilisation du type LongInt entraîne à nouveau qu'une taille de fichier supérieure à 2 Gb ne pourra être correctement déterminée.
Recherche de fichiers et répertoires▲
Il est possible de rechercher des fichiers selon certains critères de nom et d'attribut avec les commandes FindFirst et FindNext. Regrouper ces commandes permet de simuler aisément la commande DIR de MS-DOS ou l'option RECHERCHER de Windows.
Exemple :
Program
Exemple21;
Uses
Dos;
Var
Fichier : SearchRec;
BEGIN
FindFirst('*.PAS'
,Archive,Fichier);
while
DosError = 0
do
begin
WriteLn(Fichier.Name);
FindNext(Fichier);
end
;
END
.
Ce programme Exemple21 permet de rechercher et d'afficher le nom de tous les fichiers correspondant aux critères de recherche, c'est-à -dire les fichiers d'extension PAS et d'attribut archive.
Voir chapitre 10 pour l'utilisation des fichiers externes, voir aussi chapitre 16 pour la gestion des dates et heures.
Mémoire vive▲
MemAvail▲
MemAvail;
Cette fonction retourne la mémoire totale libre en octets.
MaxAvail▲
MaxAvail;
Cette fonction retourne la longueur en octets du bloc contigu le plus grand de la mémoire vive. Très utile pour connaître la taille allouable à un pointeur en cours d'exécution.