Section courante

A propos

Section administrative du site

 Langage  Installation  Elément  Tutoriel  Programmation  Bibliothèque  Cadre d'application  GUI  Projet  Jeux  Outils  Emulateur  Annexe  Aide 
ABAP/4
Ada
Assembleur
Assembly & bytecode
ASP (Active Server Pages)
Basic
C
C++
C# (C Sharp)
Cobol
ColdFusion
Fortran
HTML
Java
JavaScript
LISP
Logo
LotusScript
Oberon
Pascal
Perl
PHP
PL/1
Prolog
Python
Rebol
REXX
Ruby
SAS
NoSQL
SQL
Swift
X++ (Axapta)
GNAT
SMALLAda
VHDL
Assembleur 370
Assembleur 1802
Assembleur 4004
Assembleur 6502
Assembleur 6800
Assembleur 68000
Assembleur 8080 et 8085
Assembleur 8089
Assembleur 80x86
Assembleur AGC4
Assembleur ARM
Assembleur DPS 8000
Assembleur i860
Assembleur Itanium
Assembleur MIPS
Assembleur PDP-11
Assembleur PowerPC
Assembleur RISC-V
Assembleur SPARC
Assembleur SuperH
Assembleur UNIVAC I
Assembleur VAX
Assembleur Z80
Assembleur Z8000
Assembleur z/Architecture
ASSEMBLER/MONITOR 64
Micol Assembler
GFA Assembler
A86
MASM (Macro Assembler)
TASM (Turbo Assembler)
CIL
Jasmin
LLVM
MSIL
Parrot
P-Code (PCode)
SWEET16
G-Pascal
ASP 1.0
ASP 2.0
ASP 3.0
ASP.NET
ASP.NET Core
ABasiC (Amiga)
Adam SmartBASIC
Altair BASIC
AmigaBASIC (Amiga)
AMOS Basic (Amiga)
Atari Basic (Atari 400, 600 XL, 800, 800XL)
Basic Apple II (Integer BASIC/APPLESOFT)
Basic Commodore 64 (CBM-BASIC)
Basic Commodore 128 (BASIC 7.0)
Basic Commodore VIC-20 (CBM-BASIC 2.0)
Basic Coco 1 (Color Basic)
Basic Coco 2 (Extended Color Basic)
Basic Coco 3 (Extended Color Basic 2.0)
BASICA (PC DOS)
Basic Pro
BBC BASIC
Blitz BASIC (Amiga)
DarkBASIC
Dartmouth BASIC
GFA-Basic (Atari ST/Amiga)
GWBASIC (MS-DOS)
Liberty BASIC
Locomotive BASIC (Amstrad CPC)
MSX-Basic
Omikron Basic (Atari ST)
Oric Extended Basic
Power Basic
Quick Basic/QBasic (MS-DOS)
Sinclair BASIC (ZX80, ZX81, ZX Spectrum)
ST BASIC (Atari ST)
Turbo Basic
Vintage BASIC
VBScript
Visual Basic (VB)
Visual Basic .NET (VB .NET)
Visual Basic pour DOS
Yabasic
BeckerBASIC
SIMONS' BASIC
Basic09 d'OS-9
Disk Extended Color Basic
Basic09 d'OS-9
Disk Extended Color Basic
Access
Excel
Visual Basic pour Windows
Visual Basic .NET pour Windows
C Shell Unix (csh)
C pour Amiga
C pour Atari ST
C pour DOS
C pour Falcon030
C pour GEMDOS (Atari ST)
C pour Linux
C pour PowerTV OS
C pour OS/2
C pour Unix
C pour Windows
Aztec C
CoCo-C
GNU C
HiSoft C
IBM C/2
Introl-C
Lattice C
Microsoft C
MinGW C
MSX-C
Open Watcom C
OS-9 C Compiler
Pure C
Quick C
Turbo C
HiSoft C for Atari ST
HiSoft C for CP/M (Amstrad CPC)
C++ pour OS/2
C++ pour Windows
Borland C++
C++Builder
IBM VisualAge C++
Intel C++
MinGW C++
Open Watcom C++
Symantec C++
Turbo C++
Visual C++
Visual C++ .NET
Watcom C++
Zortech C++
C# (C Sharp) pour Windows
Apple III Cobol
Microsoft Cobol
BlueDragon
Lucee
OpenBD
Railo
Smith Project
Microsoft Fortran
WATFOR-77
CSS
FBML
Open Graph
SVG
XML
XSL/XSLT
LESS
SASS
GCJ (GNU)
JSP
Jython
Visual J++
Node.js
TypeScript
AutoLISP
ACSLogo
LotusScript pour Windows
Amiga Oberon
Oberon .NET
Apple Pascal
Delphi/Kylix/Lazarus
Free Pascal
GNU Pascal
HighSpeed Pascal
IBM Personal Computer Pascal
Lisa Pascal
Maxon Pascal
MPW Pascal
OS-9 Pascal
OSS Personal Pascal
Pascal-86
Pascal du Cray Research
Pascal/VS
Pascal-XT
PURE Pascal
QuickPascal
RemObjets Chrome
Sun Pascal
THINK Pascal
Tiny Pascal (TRS-80)
Turbo Pascal
UCSD Pascal
VAX Pascal
Virtual Pascal
Turbo Pascal for CP/M-80
Turbo Pascal for DOS
Turbo Pascal for Macintosh
Turbo Pascal for Windows
CodeIgniter (Cadre d'application)
Drupal (Projet)
Joomla! (Projet)
Phalanger (PHP .NET)
phpBB (Projet)
Smarty (balise)
Twig (balise)
Symfony (Cadre d'application)
WordPress (Projet)
Zend (Cadre d'application)
PL360
PL/M-80
PL/M-86
Turbo Prolog
CPython
IronPython
Jython
PyPy
AREXX
Regina REXX
JMP
Btrieve
Cassandra
Clipper
CouchDB
dBASE
Hbase
Hypertable
MongoDB
Redis
Access
BigQuery
DB2
H2
Interbase
MySQL
Oracle
PostgreSQL
SAP HANA
SQL Server
Sybase
U-SQL
Turbo Pascal 5
Turbo Pascal 5.5
Turbo Pascal 6
Turbo Pascal 7
Introduction
Les remarques
Les opérateurs
Les instructions conditionnelles
Les instructions de boucles
Type de données
Référence des unités
Références de mots réservés (mots clefs)
Définition de procédure et fonction
Référence de procédures et fonctions
Référence des directives de compilation
CRT
DOS
GRAPH
OBJECTS
OVERLAY
PRINTER
STRINGS
SYSTEM
TURBO3
WINDOS
Catégorie
Prototype
ASCIZ
Date
Ensemble
Fichier
Mémoire
Temps
Trigonométrie
Les premiers pas
Les jetons
Les constantes
Les types
Variables et constantes typées
Les expressions
Les instructions
Blocs, localité et étendue
Procédures et fonctions
Programmes et unités
Vue d'ensemble de la bibliothèque d'exécution
Procédures et fonctions standard
Entrée et sortie
Utilisation du 80x87
Interfaçage avec DOS
Utilisation de chaînes de caractères terminées par NULL
Utilisation de l'interface graphique Borland
Utilisation de recouvrement
Problèmes de mémoire
Problèmes de contrôle
Optimiser votre code
L'assembleur intégré
Liaison de code assembleur
Programmation orientée objet (POO)
Les fichiers
Les périphériques logiques
Files d'attente, piles, listes liées et arborescences
Bonjour
Affichage
Astronomie
Biochimie
Chimie
Conversion
Électrotechnique
Emulateur
Fichiers
Finance
Géographie
Géophysique
Géométrie
Histoire
Jeux & stratégies
Mathématique
Matrice
Médicale
Météorologie
Océanographie
Onirologie
Sport
Temps
Tri
Trigonométrie
Validation
«DRAW» du BASIC
Phase lunaire
Calcul du calcium corrigé
Calcul le taux d'alcoolémie
Bin,Hex,Base62,...
Emulateur de microprocesseur 6502
Texte séquentiel
IPaymt/Interet
NPer
PPaymt/Principal
Distance en Km entre deux longitudes et latitudes
Méridien de Paris
Triangulation d'une position (trilateration,...)
Aire d'un cercle
Aire d'une surface de prisme rectangulaire
Aire d'un triangle
Distance entre deux points
Treillis
Chiffre romain
Méthode du chiffre César (code César)
Asteroids
Bowling
Breakout
Lode Runner
Missile Command
Pac-Man
Patience
Peg Leap
Soko-Ban
Space Invaders
Space Jockey
Tetris
Tic-Tac-Toe
Tours d'Hanois
Ackermann
Exp
Factoriel
Fibonacci
Log
Nombre premier
Odd
Random
Sqrt
Triangle Pascal
Sommation
Hauteur utérine
Calcul de votre poids santé (IMC)
Unité de mesure
Fréquence des vagues
Hockey
Année bissextile
Calendrier
Date de la Pâque
FirstDayOfMonth
Horloge à aiguille
Tri à bulle (Bubble Sort)
Tri Shell Sort
ArcCos
ArcSin
Atn/ATan/ArcTan/ArcTangente
Cos
Sin
Courriel
AMDEKSYSTEM88LIB-TP
APMLIB-TP
BASICSTRLIB-TP
BIOSLIB-TP
COLORIMETRYLIB-TP
CSVLIB-TP
CYRIXLIB-TP
DRDOSLIB-TP
ELECTRICLIB-TP
ERLOGLIB-TP
FINANCIALLIB-TP
GEOLIB-TP
GRAPHICSSOLUTIONLIB-TP
HDLLIB-TP
HISTORICLIB-TP
HTMLLIB-TP
IALIB-TP
INTLLIB-TP
JSONLIB-TP
K8042LIB-TP
LETTRESLIB-TP
LOTUSSCRIPTSTRLIB-TP
METEOLIB-TP
OCEANOGRAPHICLIB-TP
OS2LIB-TP
OSSPASCALLIB-TP
POSIX-TP
PYTHONLIB-TP
SANE-TP
SNOBOLLIB-TP
SVGLIB-TP
TPW4TPLIB-TP
TSENGLABSET4000LIB-TP
VGALIB-TP
WINDOWS9XLIB-TP
XMLLIB-TP
Turbo Vision
UNITEST
MOS
AlimBase
AMIGADOS-0
AXTRO
Colorix
Corail
COREUTILS-0
DEV-COOLS
EDUX
FLEX-0
GEO-COMMANDER
HISTORIK
lettrex
LINUX-0
MATHIX
METEOPOLIS
Micro Calc
MYSTIX
Monsterbook
MSDOS-0
MSXDOS-0
OS9-0
Renegade BBS
Système Information
TRSDOS-0
Turbo Calc
UNIX-0
VIE
7iles
Arkanoid
Digger
Mario and Luigi
Turbo Assembler
Turbo Debugger
DOSBox
PCE - PC Emulator
PCem
Base de connaissances
Table ASCII
Table de codes ANSI et page de codes
RAM de l'IBM PC
Code d'erreur
Génération du code en interne du Turbo Pascal 3
Code source du Turbo Pascal 6
TPU
OBJ
Archives de paquet
Alternative
Bibliographie
Turbo Pascal à FreeDOS/FreePascal
Turbo Pascal à Linux/FreePascal
Turbo Pascal à FreeBSD/FreePascal
Turbo Pascal à eComStation/FreePascal
Préface
Notes légal
Dictionnaire
Recherche

Fichiers

Cette page aborde les problèmes de programmation en relation avec les fichiers et Turbo Pascal. Voici les différents problèmes abordés :



Fonctionnalité pour le Turbo Pascal inférieur ou égal à 3

Il est possible de changer un attribut de fichier de caché à non caché comme avec SetFAttr dans les anciennes versions de Turbo Pascal. Pour y arriver, il faut utiliser directement l'interruption 21, fonction 43h, Sous-Fonction 00h et l'interruption 21, fonction 43h, Sous-Fonction 01h. Voici les routines permettant d'y arriver :

  1. Procedure GetFAttr(FName:String;Var RdOnly,Hid,Sys,Arch:Boolean);
  2. Var 
  3.  R:Registers;
  4. Begin
  5.  FillChar(R,Sizeof(R),0);
  6.  FName:=FName+#0; { Configuré comme une chaîne de caractères terminée par un caractère nul pour DOS }
  7.  With R Do begin
  8.   AH:=$43;
  9.   AL:=0;
  10.   DS:=Seg(FName); 
  11.   DX:=Ofs(FName)+1; { Sauter la longueur du Pascal d'octet }
  12.   MsDos(R);
  13.   RdOnly:=(CL and $01)>0;
  14.   Hid:=(CL and $02)>0;
  15.   Sys:=(CL and $04)>0;
  16.   Arch:=(CL and $20)>0;
  17.  End; 
  18. End; 
  19.  
  20. Procedure PutFAttr(FName:String;RdOnly,Hid,Sys,Arch:Boolean);
  21. Var 
  22.  R:Registers;
  23. Begin
  24.  FillChar(R,Sizeof(R),0);
  25.  FName := FName+#0; { Configuré comme une chaîne de caractères terminée par un caractère nul pour DOS }
  26.  With R Do begin
  27.   AH:=$43; 
  28.   AL:=1;
  29.   DS:=Seg(FName); 
  30.   DX:=Ofs(FName)+1; { Sauter la longueur du Pascal d'octet }
  31.   If RdOnly Then CL := CL or $01;
  32.   If Hid Then CL := CL or $02;
  33.   If Sys Then CL := CL or $04;
  34.   If Arch Then CL := CL or $20;
  35.   MsDos(R);
  36.  End;
  37. End;

Il existe également des bibliothèques, comme par exemple l'unité HANDLELB.PAS de la bibliothèque HDLLIB-TP, permettant de manipuler fichiers du système d'exploitation DOS, sans passer par les routines prédéfinies du Turbo Pascal.

Fonctionnalité pour le Turbo Pascal 4 ou supérieur

Les Turbo Pascal 4 ou supérieur, offre un unité nommé DOS, offrant des routines supplémentaire pour manipuler des fichiers. Ainsi, par exemple, on peut changer la date, l'heure et l'attribut d'un fichier en utilisant des procédure de l'unité DOS. Voici un exemple d'un programme permettant de modifier ses 3 éléments à la fois :

  1. Program ChangeTimeAndAttribut;
  2.  
  3. Uses Dos;
  4.  
  5. Var
  6.  F:File;
  7.  Attr:Word;
  8.  Time:LongInt;
  9.  DT:DateTime;
  10.  
  11. BEGIN
  12.  Assign(F,'FILENAME.EXT');
  13.  DT.Year:=93;
  14.  DT.Month:=1;
  15.  DT.Day:=1;
  16.  DT.Hour:=1;
  17.  DT.Min:=0;
  18.  DT.Sec:=0;
  19.  Packtime(dt,Time);
  20.  Attr:=ReadOnly;
  21.  SetFTime(F,Time);
  22.  SetFAttr(F,Attr);
  23. END.

Grâce à la procédure SetFAttr, on peut par exemple créer un clone de la commande chmod de Linux comme le montre l'exemple CHMOD du projet LINUX-0.

Manipulation des noms de fichiers

Le Turbo Pascal offre de puissantes routines de manipulation de chaînes de caractères, lesquelles peuvent être exploitées en complément de la gestion des fichiers. Par exemple, si vous souhaitez supprimer le point et tous les caractères le suivant dans un nom de fichier DOS valide, procédez comme suit :

  1. FileName:='MONFICH.TXT';
  2. Name:=Copy(FileName,1,Pos('.',FileName)-1);

Vous obtiendrez le nom du fichier, soit 'MONFICH'. Sinon, vous pouvez utiliser FSplit pour décomposer toutes les différentes parties d'un nom de fichier/chemin et l'obtenir de cette façon.

Détection de l'existence d'un fichier

Il existe plusieurs façons de détecter la présence d'un fichier en utilisant les fonctions existantes de l'unité DOS, en voici quelques unes :

  1. Function FileExists(FileName:String):Boolean;
  2. Var
  3.  Rec:SearchRec;
  4. Begin
  5.  FindFirst(FileName,AnyFile,Rec);
  6.  FileExists:=(DOSError=0);
  7. End;

ou

  1. Function FileExists(FileName:String):Boolean;Begin
  2.  FileExists:=(FSearch(FileName,'')<>'')
  3. End;

ou

  1. Function FileExists(FileName:String):Boolean;
  2. Var
  3.  DirInfo:SearchRec;
  4. Begin
  5.  FindFirst(FileName,AnyFile,DirInfo);
  6.  If(DOSError=0)Then FileExists:=True
  7.                Else FileExists:=False;
  8. End;

ou finalement une technique uniquement compatible avec la marque Turbo Pascal en mode réel (Interruption 21h, Fonction 43h, Sous-fonction 00h) :

  1. Function FileExists(Filename:String):Boolean;Assembler;ASM
  2.  PUSH DS
  3.   LDS SI,[FileName] { Fabrique un ASCIIZ }
  4.   XOR AH,AH
  5.   LODSB
  6.   XCHG AX,BX
  7.   MOV Byte Ptr [SI+BX],0
  8.   MOV DX,SI
  9.   MOV AX,4300h      { Demande les attributs de fichier }
  10.   INT 21h
  11.   MOV AL,False
  12.   JC  @1            { Échec ? }
  13.   INC AX
  14. @1:
  15.  POP DS
  16. END;

Partage de fichiers

Lorsque vous partagez des fichiers simultanément, par exemple via un multitâche ou un réseau, il est nécessaire d'utiliser le partage de fichiers fourni par la commande SHARE du DOS ou fourni par un interpréteur de commande réseau (dans Novell, le partage de fichiers est pris en charge par l'interpréteur de commande réseau sur les serveurs, et non localement.

Le partage de fichiers est simple dans Turbo Pascal ou Borland Pascal, car la variable système FileMode définit dans quel mode un certain fichier est ouvert :

  1. Const
  2.  fmReadOnly  = $00;  (* *)
  3.  fmWriteOnly = $01;  (* Un seul d'entre eux doit être utilisé *)
  4.  fmReadWrite = $02;  (* *)
  5.  
  6.  fmDenyAll   = $10;  (* Avec seulement un de ceux-ci *)
  7.  fmDenyWrite = $20;  (* *)
  8.  fmDenyRead  = $30;  (* *)
  9.  fmDenyNone  = $40;  (* *)
  10.  
  11.  fmNoInherit = $70;  (* Définir pour «Pas d'héritage» *)

La construction de la variable FileMode est simple, il suffit d'ajouter les valeurs appropriées de la façon suivante :

  1. FileMode:=fmReadOnly+fmDenyNone;
  2.       (* Ouvrir le fichier en lecture seule, autoriser la lecture et l'écriture. *)
  3.  
  4. FileMode:=fmReadWrite+fmDenyWrite;
  5.       (* Ouvrir le fichier pour la lecture et l'écriture, refuser l'écriture. *)
  6.  
  7. FileMode:=fmReadWrite+fmDenyAll;
  8.       (* Ouvrir le fichier pour la lecture et l'écriture, refuser tout. *)

Supposons que vous ouvriez le fichier avec «fmReadWrite+fmDenyWrite». Cela vous permettra de lire et d'écrire librement dans le fichier, tandis que d'autres processus pourront lire librement le fichier. Si un autre processus tente d'ouvrir le fichier pour l'écriture, ce processus recevra l'erreur «Accès refusé» ou «Access denied».

Noter que fmNoInherit est rarement utilisé - il définit si un processus enfant généré par votre processus pourra utiliser le descripteur de fichier fourni par votre processus.

La variable FileMode n'est utilisée que lorsque le fichier est ouvert :

  1.  { ... }
  2. Assign(F,FileName);
  3. FileMode:=fmReadOnly+fmDenyNone;
  4. Reset(F);
  5. FileMode:=Whatever;    (* La modification du mode de fichier ici n'affecte pas les fichiers déjà ouverts *)

Par défaut, FileMode est défini comme FileMode:=$02 dans Turbo Pascal ou Borland Pascal, ce qui est appelé «Mode de compatibilité» dans la documentation Turbo Pascal ou Borland Pascal. Deux processus accédant au même fichier avec ce mode de fichier entraînent l'erreur critique «Violation de partage».

Ouvrir plus de 20 fichiers simultanément

Il existe une façon d'accéder à plus de 20 fichiers ouvert simultanément avec Turbo Pascal 7.0 en mode réel. Car à l'origine, le DOS avait une limitation n'autorisant pas plus de 15 fichiers ouverts simultanément. C'est la même chose que ce que vous avez dans le fichier CONFIG.SYS après la ligne Files=Write, il ne peut gérer que 15 fichiers ouverts. Voici une unité pour contourner le problème en allouant un tampon mémoire pour les fichiers ouvert à côté du PSP du programme. Il est important de noter que l'unité de l'exemple suivant devrait être inclus en premier, il ne peut pas être en recouvrement ou entrée dans un CONFIG.SYS :

  1. Unit MaxFiles;
  2.  
  3. INTERFACE
  4.  
  5. Const
  6.  MaxFile = 255; { pour 250 fichiers ouverts}
  7. Var
  8.  Index:Integer;
  9.  FilesHandleBuffer:Array[1..MaxFile] of Byte;
  10.  
  11. BEGIN
  12.  For Index:=1 to MaxFile do FilesHandleBuffer[Index]:=$FF;
  13.  For Index:=1 to 5 do FilesHandleBuffer[index]:=Mem[PrefixSeg:$18+Pred(Index)];
  14.  MemW[PrefixSeg:$32]:=MaxFile;
  15.  MemW[PrefixSeg:$34]:=Ofs(FilesHandleBuffer);
  16.  MemW[PrefixSeg:$36]:=Seg(FilesHandleBuffer);
  17. END.

Est-ce un fichier

On peut aussi vérifier grâce à l'unité DOS si le fichier indiqué est vraiment un fichier et non pas un répertoire. Voici un fonction permettant de vérifier s'il s'agit bien d'un fichier :

  1. Function IsFile(sFile:String):Boolean;
  2. Var 
  3.  S:SearchRec;
  4. Begin
  5.  FindFirst(sFile,Directory,S);
  6.  IsFile:=(DOSError=0)and(s.Attr and Directory<>Directory)and(Pos( '?',sFile) = 0)and(Pos('*',sFile)=0);
  7. End;

Nom avec des caractères générique

Dans certaines situations, il est important de savoir si l'on a affaire à un seul fichier ou à plusieurs fichiers en même temps. Lorsqu'il s'agit de plusieurs fichiers, on les appelle des fichiers avec des caractères génériques (ou un caractère joker en anglais). L'astuce consiste à repérer soit un point d'interrogation (« ? ») soit un astérisque (« * »). Voici une fonction permettant de vérifier si le nom est unique :

  1. Function IsWildCard(Const Path:String):Boolean;Begin
  2.  IsWildCard:=(Pos('*',Path)>0)or(Pos('?',Path)>0);
  3. End;

Copie de fichier binaire

Le Turbo Pascal n'offre pas de fonction de copie d'un fichier binaire complet de façon intégré. Pour y parvenir, nous devons donc ouvrir un fichier, puis créer un fichier, copier les données d'un fichier vers l'autre et fermer les deux fichiers. Cette opération ressemblerait donc à ceci :

  1. Function CopyFile(Source,Target:String;ShowProgression:Boolean):Boolean;
  2. Var
  3.  SourceFile,TargetFile:File;
  4.  RecordsRead:Integer;
  5.  Buffer:Array[1..1000]of Byte;
  6. Begin
  7.  CopyFile:=False;
  8.  Assign(SourceFile,Source);
  9.  {$I-}Reset(SourceFile,1);{$I+}
  10.  If IOResult<>0Then Begin
  11.   WriteLn('Fichier source introuvable ',Source);
  12.   Exit;
  13.  End;
  14.  Assign(TargetFile,Target);
  15.  {$I-}Rewrite(TargetFile,1);
  16.  BlockRead(SourceFile,Buffer,SizeOf(Buffer),RecordsRead);
  17.  While RecordsRead>0 do Begin
  18.   BlockWrite(TargetFile,Buffer,RecordsRead);
  19.   BlockRead(SourceFile,Buffer,SizeOf(Buffer),RecordsRead);
  20.  End;
  21.  Close(SourceFile);
  22.  Close(TargetFile);
  23.  {$I+}
  24.  CopyFile:=True;
  25. End;

Renommer un fichier

En Turbo Pascal, le renommage d'un fichier est un peu spéciale, dans le sens, qu'il faut ouvrir un fichier pour pouvoir le renommer. Cette philosophie est un peu à l'opposer du système d'exploitation DOS, lequel ne permet pas ce genre d'opération lorsqu'un fichier est ouvert. Ainsi, pour pouvoir renommer un fichier en Turbo Pascal, on devrait avoir une fonction ressemblant à ceci :

  1. Function RenameFile(Source,Target:String):Boolean;
  2. Var
  3.  F:File;
  4. Begin
  5.  {$I-}Assign(F,Source);
  6.  Rename(F,Target); {$I+}
  7.  RenameFile:=IoResult=0;
  8. End; 


PARTAGER CETTE PAGE SUR
Dernière mise à jour : Jeudi, le 8 juillet 2024