Aller au contenu principal
Version : 20 R10

File

Les objets File sont créés avec la commande File. Ils contiennent des références à des fichiers du disque qui peuvent exister réellement ou non sur le disque. Par exemple, lorsque vous exécutez la commande File pour créer un nouveau fichier, un objet File valide est créé mais rien n'est réellement stocké sur le disque jusqu'à ce que vous appeliez la fonction file.create( ).

Exemple

L'exemple suivant crée un fichier de préférences dans le dossier du projet :

var $created : Boolean
$created:=File("/PACKAGE/SpecialPrefs/"+Current user+".myPrefs").create()

Chemins d'accès

Les objets de type File prennent en charge plusieurs noms de chemin, y compris les syntaxes filesystems et posix. Les chemins d'accès pris en charge sont détaillés dans la page Chemins d'accès.

Objet File
































4D.File.new()

Historique
ReleaseModifications
18 R6Ajout

4D.File.new ( path : Text { ; pathType : Integer } ) : 4D.File
4D.File.new ( fileConstant : Integer ) : 4D.File

Description

La fonction 4D.File.new() crée et retourne un nouvel objet de type 4D.File. Elle est identique à la commande File (raccourci).

Il est recommandé d'utiliser la commande File au lieu de 4D.File.new().

.create()

Historique
ReleaseModifications
17 R5Ajout

Non disponible pour les archives ZIP

.create()* : Boolean

ParamètresTypeDescription
RésultatBoolean<-Vrai si le fichier a été créé avec succès, sinon Faux

Description

La fonction .create() crée un fichier sur disque en fonction des propriétés de l'objet File.

Le cas échéant, la fonction crée la hiérarchie du dossier en se basant sur la description des propriétés platformPath ou path. Si le fichier existe déjà sur disque, la fonction ne fait rien (aucune erreur n'est générée) et retourne faux.

Valeur retournée

  • Vrai si le fichier est créé avec succès ;
  • Faux si un fichier du même nom existe déjà ou si une erreur s'est produite.

Exemple

Création d'un fichier de préférences dans le dossier principal :

 var $created : Boolean
$created:=File("/PACKAGE/SpecialPrefs/"+Current user+".myPrefs").create()

.createAlias()

Historique
ReleaseModifications
17 R5Ajout

.createAlias*( destinationFolder : 4D.Folder ; aliasName : Text { ; aliasType : Integer } ) : 4D.File

ParamètresTypeDescription
dossierDestination4D.Folder->Dossier de destination pour l'alias ou le raccourci
aliasNameText->Nom de l'alias ou du raccourci
aliasTypeInteger->Type de lien de l'alias
Résultat4D.File<-Référence du fichier de l'alias ou du raccourci

Description

La fonction .createAlias() crée un alias (macOS) ou un raccourci (Windows) vers le fichier avec le nom aliasName spécifié dans le dossier désigné par l'objet destinationFolder.

Passez le nom de l'alias ou du raccourci à créer dans le paramètre aliasName.

Par défaut sur macOS, la fonction crée un alias standard. Vous pouvez également créer un lien symbolique à l'aide du paramètre aliasType. Les constantes suivantes sont disponibles :

ConstanteValeurCommentaire
fk alias link0Lien alias (macOS uniquement)(par défaut)
fk symbolic link1Lien symbolique (macOS uniquement)

Sur Windows, un raccourci (fichier .lnk) est toujours créé (le paramètre aliasType est ignoré).

Objet retourné

Un objet 4D.File avec la propriété isAlias mise à true.

Exemple

Vous souhaitez créer un alias pour un fichier contenu dans votre dossier principal :

 $myFile:=Folder(fk documents folder).file("Archives/ReadMe.txt")
$aliasFile:=$myFile.createAlias(File("/PACKAGE");"ReadMe")

.delete()

Historique
ReleaseModifications
17 R5Ajout

.delete*()

ParamètresTypeDescription
Ne requiert aucun paramètre

Description

La fonction .delete() supprime le fichier.

Si le fichier n'existe pas sur le disque, la fonction ne fait rien (aucune erreur n'est générée).

Si le fichier est actuellement ouvert, le résultat dépend du système d'exploitation :

  • sous Windows, une erreur est générée,
  • sous macOS, aucune erreur n'est générée et le fichier est supprimé.
caution

.delete() peut supprimer n'importe quel fichier sur un disque. Cela inclut les documents créés avec d'autres applications, ainsi que les applications elles-mêmes. .delete() doit être utilisé avec prudence. La suppression d'un fichier est une opération permanente et irréversible.

Exemple

Vous souhaitez supprimer un fichier spécifique dans le dossier de la base de données :

 $tempo:=File("/PACKAGE/SpecialPrefs/"+Current user+".prefs")
If($tempo.exists)
$tempo.delete()
ALERT("User preference file deleted.")
End if

.getAppInfo()

Historique
ReleaseModifications
20 R9Lecture des UUIDs dans les exécutables macOS
19Ajout

.getAppInfo*() : Object

ParamètresTypeDescription
RésultatObject<-Informations sur le fichier de l'application

Description

La fonction .getAppInfo() renvoie le contenu des informations d'un fichier d'application sous la forme d'un objet.

La fonction doit être utilisée avec un fichier existant et pris en charge : .plist (toutes les plateformes), .exe/.dll (Windows), ou exécutable macOS. Si le fichier n'existe pas sur le disque ou n'est pas un fichier pris en charge, la fonction renvoie un objet vide (aucune erreur n'est générée).

Objet retourné avec un fichier .plist (toutes les plateformes)

Le contenu du fichier xml est analysé et les clés sont renvoyées en tant que propriétés de l'objet, en préservant leur type (texte, booléen, numérique). .plist dict est renvoyé sous forme d'objet JSON et .plist array est renvoyé sous forme de tableau JSON.

note

Cette fonction ne prend en charge que les fichiers .plist au format xml (texte). Une erreur est retournée si elle est utilisée avec un fichier .plist au format binaire.

Objet retourné avec un fichier .exe ou .dll (Windows uniquement)

Toutes les valeurs de propriétés sont de type Texte.

PropriétéType
InternalNameText
ProductNameText
CompanyNameText
LegalCopyrightText
ProductVersionText
FileDescriptionText
FileVersionText
OriginalFilenameText

Objet retourné avec un fichier exécutable macOS (macOS uniquement)

note

Un fichier exécutable macOS est situé dans un package (par exemple, myApp.app/Contents/MacOS/myApp).

La fonction renvoie un objet archs qui contient une collection d'objets décrivant chaque architecture présente dans l'exécutable (un exécutable fat peut intégrer plusieurs architectures). Chaque objet de la collection contient les propriétés suivantes :

PropriétéTypeDescription
nameTextNom de l'architecture ("arm64" ou "x86_64")
typeNumberIdentifiant numérique de l'architecture
uuidTextReprésentation textuelle de l'uuid de l'exécutable

Exemple 1

  // afficher les informations de copyright d'un info.plist (toute plate-forme)
var $infoPlistFile : 4D.File
var $info : Object
$infoPlistFile:=File("/RESOURCES/info.plist")
$info:=$infoPlistFile.getAppInfo()
ALERT($info.Copyright)

Exemple 2

 // affiche les informations de copyright du fichier .exe de l'application (windows)
var $exeFile : 4D.File
var $info : Object
$exeFile:=File(Application file ; fk platform path)
$info:=$exeFile.getAppInfo()
ALERT($info.LegalCopyright)

Exemple 3

 // Obtenir les uuids d'une application (macOS)
var $app:=File("/Applications/myApp.app/Contents/MacOS/myApp")
var $info:=$app.getAppInfo()

Résultat dans $info :

{
"archs":
[
{
"name":"x86_64",
"type":16777223,
"uuid":"3840983CDA32392DA4D1D32F08AB3212"
},
{
"name":"arm64",
"type":16777228,
"uuid":"E49F6BA275B931DDA183C0B0CDF0ADAF"
}
]
}

Voir également

.setAppInfo()

.moveTo()

Historique
ReleaseModifications
17 R5Ajout

.moveTo*( destinationFolder : 4D.Folder { ; newName : Text } ) : 4D.File

ParamètresTypeDescription
dossierDestination4D.Folder->Dossier de destination
nouveauNomText->Nom complet du fichier déplacé
Résultat4D.File<-Fichier déplacé

Description

La fonction .moveTo() déplace ou déplace et renomme l'objet File dans le dossier destinationFolder spécifié.

Le destinationFolder doit exister sur disque, sinon une erreur est générée.

Par défaut, le fichier garde le même nom lorsqu'il est déplacé. Par défaut, le fichier garde le même nom lorsqu'il est déplacé. Le nouveau nom doit être conforme aux règles de nommage (ex : il ne doit pas contenir de caractères tels que ":", "/", etc.), sinon une erreur est retournée.

Objet retourné

L'objet File déplacé.

Exemple

$DocFolder:=Folder(fk documents folder)
$myFile:=$DocFolder.file("Current/Infos.txt")
$myFile.moveTo($DocFolder.folder("Archives");"Infos_old.txt")

.open()

Historique
ReleaseModifications
19 R7Ajout

.open*( { mode : Text } ) : 4D.FileHandle
.open( { options : Object } ) : 4D.FileHandle

ParamètresTypeDescription
modeText->Mode d'ouverture : "read", "write", "append"
optionsObject->Options d'ouverture
Résultat4D.FileHandle<-Nouvel objet File handle

Description

La fonction .open() crée et renvoie un nouvel objet 4D.FileHandle sur le fichier, dans le mode spécifié ou avec les options spécifiées. Vous pouvez utiliser les fonctions et les propriétés de la classe 4D.FileHandle pour écrire, lire ou ajouter du contenu au fichier.

Si vous utilisez le paramètre mode (texte), passez le mode d'ouverture pour le file handle :

modeDescription
"read"(Par défaut) Crée un file handle pour lire les valeurs dans le fichier. Si le fichier n'existe pas sur disque, une erreur est renvoyée. Vous pouvez ouvrir autant de file handles que vous voulez en mode "read" sur le même objet File.
"write"Crée un file handle pour écrire des valeurs dans le fichier (en commençant par le début du contenu du fichier). Si le fichier n'existe pas sur le disque, il est créé. Vous ne pouvez ouvrir qu'un seul file handle en mode "write" sur le même objet File.
"append"Crée un file handle pour écrire des valeurs dans le fichier (en commençant par la fin du fichier). Si le fichier n'existe pas sur le disque, il est créé. Vous ne pouvez ouvrir qu'un seul file handle en mode "append" sur le même objet File.

La valeur du paramètre mode est sensible à la casse.

Si vous utilisez le paramètre options (objet), vous pouvez passer d'autres options pour le file handle par le biais des propriétés suivantes (ces propriétés peuvent être lues ultérieurement à partir de l'objet file handle ouvert) :

optionsTypeDescriptionPar défaut
.modeTextMode d'ouverture (voir mode ci-dessus)"read"
.charsetTextJeu de caractères utilisé lors de la lecture ou de l'écriture dans le fichier. Utilisez le nom standard du jeu (par exemple "ISO-8859-1" ou "UTF-8")"UTF-8"
.breakModeReadText ou numériqueMode de traitement des sauts de ligne utilisés lors de la lecture du fichier (voir ci-dessous)"native" ou 1
.breakModeWriteText ou numériqueMode de traitement des sauts de ligne utilisés lors de l'écriture dans le fichier (voir ci-dessous)"native" ou 1

La fonction remplace tous les délimiteurs de fin de ligne d'origine. Par défaut, le délimiteur natif est utilisé, mais vous pouvez définir un autre délimiteur. Les propriétés .breakModeRead et .breakModeWrite indiquent le traitement à appliquer aux caractères de fin de ligne dans le document. Vous pouvez utiliser l'une des valeurs suivantes (texte ou numérique) :

Mode de rupture en texteBreak mode en numérique (constante)Description
"native"1 (Document with native format)(Défaut) Les fins de ligne sont convertis au format natif de la plate-forme d’exécution : LF (line feed) sous macOS, CRLF (carriage return + line feed) sous Windows
"crlf"2 (Document with CRLF)Les fins de ligne sont converties en CRLF (retour chariot + saut de ligne), le format par défaut de Windows
"cr"3 (Document with CR)Les fins de ligne sont converties en CR (retour chariot), le format MacOS classique par défaut
"lf"4 (Document with LF)Les fins de ligne sont converties en LF (line feed), le format Unix et macOS par défaut

La valeur du paramètre break mode en texte est sensible à la casse.

Exemple

Vous voulez créer un file handle pour lire le fichier "ReadMe.txt" :

var $f : 4D.File
var $fhandle : 4D.FileHandle

$f:=File("C:\\Documents\\Archives\\ReadMe.txt";fk platform path)
$fhandle:=$f.open("read")

.rename()

Historique
ReleaseModifications
17 R5Ajout

.rename*( newName : Text ) : 4D.File

ParamètresTypeDescription
nouveauNomText->Nouveau nom complet du fichier
Résultat4D.File<-Fichier renommé

Description

La fonction .rename() renomme le fichier avec le nom que vous avez passé dans newName et retourne l'objet File renommé.

Le paramètre newName doit être conforme aux règles de nommage (ex : il ne doit pas contenir des caractères tels que ":", "/", etc.), sinon une erreur est retournée. S'il existe déjà un fichier portant le même nom, une erreur est retournée.

A noter que la fonction modifie le nom complet du fichier, c'est-à-dire que si vous ne passez pas une extension dans le paramètre newName, le fichier aura un nom sans extension.

Objet retourné

L'objet File renommé.

Exemple

Vous souhaitez que "ReadMe.txt" soit renommé "ReadMe_new.txt" :

 $toRename:=File("C:\\Documents\\Archives\\ReadMe.txt";fk platform path)
$newName:=$toRename.rename($toRename.name+"_new"+$toRename.extension)

.setAppInfo()

Historique
ReleaseModifications
20 R9Lecture des UUIDs dans les exécutables macOS
20Prise en charge de WinIcon
19Ajout

.setAppInfo*( info : Object )

ParamètresTypeDescription
infoObject->Propriétés à écrire dans les informations d'un fichier d'application

Description

La fonction .setAppInfo() écrit les propriétés info en tant que contenu d'information d'un fichier d'application.

La fonction doit être utilisée avec un fichier existant et pris en charge : .plist (toutes les plateformes), .exe/.dll (Windows), ou exécutable macOS. Si elle est utilisée avec un autre type de fichier ou avec un fichier .exe/.dll qui n'existe pas déjà sur le disque, la fonction ne fait rien (aucune erreur n'est générée).

Paramètre info avec un fichier .plist (toutes plateformes)

note

Cette fonction ne prend en charge que les fichiers .plist au format xml (texte). Une erreur est retournée si elle est utilisée avec un fichier .plist au format binaire.

Si le fichier .plist existe déjà sur le disque, il est mis à jour. Dans le cas contraire, il est créé.

Chaque propriété valide définie dans le paramètre objet info est écrite dans le fichier . plist sous forme de clé. Tous les noms de clés sont acceptés. Les types des valeurs sont préservés si possible.

Si une clé définie dans le paramètre info est déjà définie dans le fichier .plist, sa valeur est mise à jour tout en conservant son type d'origine. Les autres clés définies dans le fichier .plist ne sont pas modifiées.

note

Pour définir une valeur de type Date, le format à utiliser est chaîne de timestamp json formatée en ISO UTC sans les millisecondes ("2003-02-01T01:02:03Z") comme dans l'éditeur de plist Xcode.

Paramètre objet info avec un fichier .exe ou .dll (Windows uniquement)

Chaque propriété valide définie dans le paramètre objet info est écrite dans la ressource version du fichier .exe ou .dll. Les propriétés disponibles sont (toute autre propriété sera ignorée) :

PropriétéTypeCommentaire
InternalNameText
ProductNameText
CompanyNameText
LegalCopyrightText
ProductVersionText
FileDescriptionText
FileVersionText
OriginalFilenameText
WinIconTextChemin Posix du fichier .ico. Cette propriété ne s'applique qu'aux fichiers exécutables générés par 4D.

Pour toutes les propriétés à l'exception de WinIcon, si vous passez un texte null ou vide comme valeur, une chaîne vide est écrite dans la propriété. Si vous passez une valeur de type autre que Texte, elle est "stringifiée".

Pour la propriété WinIcon, si le fichier d'icône n'existe pas ou a un format incorrect, une erreur est générée.

Paramètre info avec un fichier macOS exécutable (macOS uniquement)

info doit être un objet avec une seule propriété nommée archs qui est une collection d'objets dans le format retourné par getAppInfo(). Chaque objet doit contenir au moins les propriétés type et uuid (name n'est pas utilisé).

Chaque objet de la collection info.archs doit contenir les propriétés suivantes :

PropriétéTypeDescription
typeNumberIdentifiant numérique de l'architecture à modifier
uuidTextReprésentation textuelle du nouvel uuid exécutable

Exemple 1

  // définir certaines clés dans un fichier info.plist (toutes plateformes)
var $infoPlistFile : 4D.File
var $info : Object
$infoPlistFile:=File("/RESOURCES/info.plist")
$info:=New object
$info.Copyright:="Copyright 4D 2023" //text
$info.ProductVersion:=12 //integer
$info.ShipmentDate:="2023-04-22T06:00:00Z" //timestamp
$info.CFBundleIconFile:="myApp.icns" //pour macOS
$infoPlistFile.setAppInfo($info)

Exemple 2

  // définir le copyright, la version et l'icône d'un fichier .exe (Windows)
var $exeFile; $iconFile : 4D.File
var $info : Object
$exeFile:=File(Application file ; fk platform path)
$iconFile:=File("/RESOURCES/myApp.ico")
$info:=New object
$info.LegalCopyright:="Copyright 4D 2023"
$info.ProductVersion:="1.0.0"
$info.WinIcon:=$iconFile.path
$exeFile.setAppInfo($info)

Exemple 3

// régénérer les uuids d'une application (macOS)

// lire les uuids de myApp
var $app:=File("/Applications/myApp.app/Contents/MacOS/myApp")
var $info:=$app.getAppInfo()

// régénérer les uuids pour toutes les architectures
For each ($i; $info.archs)
$i.uuid:=Generate UUID
End for each

// mettre à jour l'application avec les nouveaux uuids
$app.setAppInfo($info)

Voir également

.getAppInfo()

.setContent()

Historique
ReleaseModifications
17 R5Ajout

.setContent* ( content : Blob )

ParamètresTypeDescription
contentBLOB->Nouveau contenu du fichier

Description

La fonction .setContent() réécrit l'intégralité du contenu du fichier en utilisant les données stockées dans le BLOB content. Pour plus d'informations sur les BLOBs, veuillez vous reporter à la section BLOB.

Exemple

 $myFile:=Folder(fk documents folder).file("Archives/data.txt")
$myFile.setContent([aTable]aBlobField)

.setText()

Historique
ReleaseModifications
19 R3Par défaut pour les nouveaux projets : pas de BOM et (macOS) LF comme saut de ligne
17 R5Ajout

.setText* ( text : Text {; charSetName : Text { ; breakMode : Integer } } )
.setText ( text : Text {; charSetNum : Integer { ; breakMode : Integer } } )

ParamètresTypeDescription
textText->Texte à stocker dans le fichier
charSetNameText->Nom du jeu de caractères
charSetNumInteger->Numéro du jeu de caractères
breakModeInteger->Mode de traitement des retours à la ligne

Description

La fonction .setText() écrit text comme nouveau contenu du fichier.

Si le fichier référencé dans l'objet File n'existe pas sur disque, il est créé par la fonction. Lorsque le fichier existe déjà sur disque, son contenu antérieur est supprimé, sauf s'il est déjà ouvert, auquel cas son contenu est verrouillé et une erreur est générée.

Dans le paramètre text, passez le texte à écrire dans le fichier. Cela peut être un texte littéral ("my text"), ou un champ / variable texte 4D.

Optionnellement, vous pouvez indiquer le jeu de caractères à utiliser pour l'écriture du contenu. Vous pouvez passer soit :

  • dans charSetName, une chaîne contenant le nom de jeu standard (par exemple "ISO-8859-1" ou "UTF-8"),
  • ou dans charSetNum, l'ID MIBEnum (numéro) du nom du jeu standard.

Pour consulter la liste des jeux de caractères pris en charge par 4D, veuillez vous reporter à la description de la commande CONVERT FROM TEXT.

Si une marque d'ordre d'octet (BOM) existe pour le jeu de caractères, 4D l'insère dans le fichier, sauf si le jeu de caractères utilisé contient le suffixe "-no-bom" (par exemple "UTF-8-no-bom"). Si vous n'indiquez pas un jeu de caractères, 4D utilise par défaut le jeu de caractères "UTF-8" sans BOM.

Dans le paramètre breakMode, vous pouvez passer une valeur numérique indiquant le traitement à appliquer aux caractères de fin de ligne avant de les stocker dans le fichier. Les constantes suivantes du thème Documents système sont disponibles :

ConstanteValeurCommentaire
Document unchanged0Aucun traitement
Document with native format1(Défaut) Les fins de ligne sont convertis au format natif de la plate-forme d’exécution : LF (line feed) sous macOS, CRLF (carriage return + line feed) sous Windows
Document with CRLF2Les fins de ligne sont converties en CRLF (retour chariot + saut de ligne), le format par défaut de Windows
Document with CR3Les fins de ligne sont converties en CR (retour chariot), le format MacOS classique par défaut
Document with LF4Les fins de ligne sont converties en LF (line feed), le format Unix et macOS par défaut

Par défaut, lorsque vous omettez le paramètre breakMode les retours à la ligne sont traités en mode natif (1).

Note de compatibilité : Des options de compatibilité sont disponibles pour la gestion des fins de ligne et des BOM. Voir la page Compatibilité sur doc.4d.com.

Exemple

$myFile:=File("C:\\Documents\\Hello.txt";fk platform path)
$myFile.setText("Hello world")