1. Définition
Un fichier est un ensemble ordonné d'éléments du même type. Les routines standard d'Entrées/Sorties utilisent les types prédéfinis TextFile et Text qui représentent un fichier contenant des caractères organisés en lignes. Pour davantage d'informations sur les entrées et sorties de fichier, voir Routines standard et d'E/S.
Pour déclarer un type fichier, utilisez la syntaxe : type <nomTypeFichier> = file of <type>
où nom<TypeFichier> est un identificateur valide et type un type de taille fixe. Les types pointeur, implicites ou explicites ne sont pas permis. Un fichier ne peut donc pas contenir des tableaux dynamiques, des chaînes longues, des classes, des objets, des pointeurs, des variants, d'autres fichiers ou des types structurés en contenant.
2. routines d'entrées/sorties
Append, procédure Prépare un fichier exis tant pour l'ajout de texte
BlockRead, procédure Lit un ou plusieurs enregistrements d'un fichier ouvert et les place dans une variable
BlockWrite, procédure Écrit un ou plusieurs enregistrements d'une variable mémoire dans un fichier ouvert
Eof, fonction La fonction Eof détermine si la position en cours du pointeur se trouve en fin de fichier
FileMode, variable Détermine le mode d'accès à utiliser lorsque des fichiers typés ou non typés sont ouverts avec la classe Reset
FilePos, fonction Renvoie la position en cours dans un fichier
FileSize, fonction Renvoie la taille d'un fichier (en octets) ou le nombre d'enregistrements dans le fichier
IOResult, fonction Renvoie l'état de la dernière opération d'E/S
Input, variable Spécifie un fichier en lecture seule associée à un périphérique d'entrée standard du système d'exploitation
MkDir, procédure Crée un nouveau répertoire
Output, variable Spécifie un fichier en écriture seulement associé à une sortie standard, généralement l'affichage
Rename, procédure Renomme un fichier externe
Reset, procédure Ouvre un fichier existant
Rewrite, procédure Crée puis ouvre un nouveau fichier
RmDir, procédure Supprime un sous-répertoire vide
Seek, procédure Déplace la position en cours dans un fichier vers le composant spécifié Truncate, procédure Efface tous les enregistrements situés après la position en cours dans le
fichier
Write, procédure (for typed files) Écrit dans un fichier typé. 3. Routines de fichiers texte
AssignPrn, procédure Affecte une variable fichier texte à l'imprimante
Eoln, fonction Eoln détermine si la position en cours du pointeur se trouve en fin de ligne d'un fichier texte Erase, procédure Supprime un fichier externe
Flush, procédure Efface le tampon associé à un fichier texte ouvert en écriture Read, procédure Read lit les données d'un fichier
Readln, procédure Lit une ligne de texte dans un fichier SeekEof, fonction Renvoie l'état de fin d'un fichier
SeekEoln, fonction Renvoie l'état de fin de ligne d'un fichier SetTextBuf, procédure Affecte un tampon d'E/S à un fichier texte Write, procédure (for text files) Écrit dans un fichier texte
Writeln, procédure Place une marque de fin de ligne dans un fichier texte.
4. Routines de gestion de fichiers
AssignFile, procédure Associe le nom d'un fichier externe à une variable fichier ChDir, procédure Change le répertoire en cours
Constantes en mode ouverture de fichier
Les constantes de mode d'ouverture de fichier sont utilisées pour contrôler le mode d'accès au fichier ou au flux
Constantes mode de fichier Les constantes mode de fichier sont utilisées pour ouvrir et fermer des fichiers disque CreateDir, fonction Crée un nouveau répertoire
DeleteFile, fonction Supprime un fichier du disque
DiskFree, fonction Renvoie le nombre d'octets disponibles sur le lecteur spécifié DiskSize, fonction Renvoie la taille en octets du disque spécifié
FileClose, procédure Ferme le fichier spécifié
FileDateToDateTime, fonction Convertit une valeur date ou heure DOS en valeur au format TDateTime FileExists, fonction Teste si le fichier spécifié existe.
FileGetAttr, fonction Renvoie les attributs du fichier FileName FileGetDate, fonction Renvoie la date et l'heure DOS du fichier spécifié FileOpen, fonction Ouvre un fichier en utilisant le mode d'accès spécifié FileRead, fonction Lit le nombre d'octets spécifié dans un fichier FileSearch, fonction Recherche un fichier dans le chemin DOS spécifié FileSeek, fonction Positionne le pointeur d'un fichier préalablement ouvert FileSetAttr, fonction Définit les attributs du fichier spécifié
FileSetDate, fonction Définit la marque horaire du fichier DOS spécifié
FileWrite, fonction Ecrit le contenu du tampon à l'emplacement en cours dans un fichier FindClose, procédure Libère la mémoire allouée par FindFirst
FindFirst, fonction Cherche la première occurrence d'un fichier avec un ensemble d'attributs précis dans un répertoire spécifié.
FindNext, fonction Renvoie l'entrée suivante correspondant au nom et aux attributs spécifiés dans un précédent appel à FindFirst
GetCurrentDir, fonction Renvoie le nom du répertoire en cours
GetDir, procédure Renvoie le répertoire en cours sur le lecteur spécifié RemoveDir, fonction Efface un répertoire vide existant
RenameFile, fonction Renomme un fichier
SetCurrentDir, fonction Définit le répertoire en cours.
5. Exemples
Const Max=100;
type TDonnees=record
Nom, Prenom : string[50]; // ne pas utiliser des string, ansiString ou Pchar !!
adresse:string[150]; cdPostl:integer; end; TBase=record item:Array[1..Max] of TDonnees; nbitem :integer; end; var
fic : file of tBase;
nomtb : tbase ...
// Pour enregistrer la base de données sur disque assignfile(fic,'toto.tab'); rewrite(fic); write(fic,montb); closefile(fic); ...
// Pour récupérer la base de données du disque assignfile(fic,'toto.tab'); reset(fic); read(fic,montb); closefile(fic); ATTENTION:
Il serait très tentant d’utiliser: type TDonnees=record
Nom,Prenom, adresse:string; cdPostl:integer;
end;
à la place de la déclaration ci-dessus. Cela éviterait de tronquer les chaînes ou de les surdimensionné (pour éviter un encombrement inutile de la mémoire). Il n’y aurait aucune différence de comportement (apparent) pour tout ce qui est stockage des données en mémoire.
Le problème apparaîtrait lors de l’instruction: write(fic,montb);
Delphi et Kilix 36 D. Mailliet en effet, on n’enregistrerait pas les valeurs des Nom,Prenom, adresse mais des pointeurs référençant les adresses de ces valeurs. Ce qui n’aurait aucun intérêt, puisque la création est dynamique et qu’une autre exécution sur le même ordinateur ne donnerait pas les mêmes adresses pour ces valeurs. Ne parlons pas d’une exécution sur une autre machine!
Et le compilateur s’en rend compte (et c’est heureux) et il le signale par une erreur à la compilation.