File
Los objetos File se crean con el comando File. Contienen referencias a archivos de disco que pueden o no existir realmente en el disco. Por ejemplo, cuando ejecuta el comando File para crear un nuevo archivo, se crea un objeto File válido pero en realidad nada se guarda en el disco hasta que se llama a la función file.create( ).
Ejemplo
El siguiente ejemplo crea un archivo de preferencias en la carpeta del proyecto:
var $created : Boolean
$created:=File("/PACKAGE/SpecialPrefs/"+Current user+".myPrefs").create()
Rutas de acceso
Los objetos File soportan varios nombres de ruta, incluyendo la sintaxis filesystems o posix. Los nombres de ruta soportados se detallan en la página Rutas de acceso.
Objeto File
4D.File.new()
Historia
| Lanzamiento | Modificaciones | 
|---|---|
| 18 R6 | Añadidos | 
4D.File.new ( path : Text { ; pathType : Integer } ) : 4D.File
4D.File.new ( fileConstant : Integer ) : 4D.File
Descripción
Lanzamiento Es idéntico al comando File (atajo).
Se recomienda utilizar el comando de acceso directo
Fileen lugar de4D.File.new().
.create()
Historia
| Lanzamiento | Modificaciones | 
|---|---|
| 17 R5 | Añadidos | 
No disponible para archivos ZIP
.create()* : Boolean
| Parámetros | Tipo | Descripción | |
|---|---|---|---|
| Resultado | Boolean | <- | True si el archivo se ha creado con éxito, false en caso contrario | 
Descripción
La función .create() crea un archivo en el disco según las propiedades del objeto File.
Si es necesario, la función crea la jerarquía de carpetas como se describe en las propiedades platformPath o path. Si el archivo ya existe en el disco, la función no hace nada (no se lanza ningún error) y devuelve false.
Valor devuelto
- True si el archivo se crea con éxito;
- False si ya existe un archivo con el mismo nombre o si ha ocurrido un error.
Ejemplo
Creación de un archivo de preferencias en la carpeta principal:
 var $created : Boolean
 $created:=File("/PACKAGE/SpecialPrefs/"+Current user+".myPrefs").create()
.createAlias()
Historia
| Lanzamiento | Modificaciones | 
|---|---|
| 17 R5 | Añadidos | 
.createAlias*( destinationFolder : 4D.Folder ; aliasName : Text { ; aliasType : Integer } ) : 4D.File
| Parámetros | Tipo | Descripción | |
|---|---|---|---|
| destinationFolder | 4D.Folder | -> | Carpeta de destino para el alias o el acceso directo | 
| aliasName | Text | -> | Nombre del alias o del atajo | 
| aliasType | Integer | -> | Tipo de enlace del alias | 
| Resultado | 4D.File | <- | Referencia del archivo del alias o de atajo | 
Descripción
La función .createAlias() crea un alias (macOS) o un acceso directo (Windows) al archivo con el nombre aliasName especificado en la carpeta designada por el objeto destinationFolder.
Pase el nombre del alias o del acceso directo a crear en el parámetro aliasName.
Por defecto en macOS, la función crea un alias estándar. También puede crear un enlace simbólico utilizando el parámetro aliasType. Las siguientes constantes están disponibles:
| Constante | Valor | Comentario | 
|---|---|---|
| fk alias link | 0 | Enlace de alias (por defecto) | 
| fk symbolic link | 1 | Enlace simbólico (sólo para macOS) | 
En Windows, siempre se crea un acceso directo (archivo.lnk) (el parámetro aliasType es ignorado).
Objeto devuelto
Un objeto 4D.File con la propiedad isAlias definida en true.
Ejemplo
Quiere crear un alias para un archivo en su carpeta principal:
 $myFile:=Folder(fk documents folder).file("Archives/ReadMe.txt")
 $aliasFile:=$myFile.createAlias(File("/PACKAGE");"ReadMe")
.delete()
Historia
| Lanzamiento | Modificaciones | 
|---|---|
| 17 R5 | Añadidos | 
.delete*()
| Parámetros | Tipo | Descripción | |
|---|---|---|---|
| No requiere ningún parámetro | 
Descripción
La función .delete() borra el archivo.
Si el archivo no existe en el disco, la función no hace nada (no se genera ningún error).
Si el archivo está abierto, el resultado depende del sistema operativo:
- en Windows, se genera un error,
- en macOS, no se genera ningún error y el archivo se elimina.
.delete() puede eliminar cualquier archivo de un disco. Esto incluye los documentos creados con otras aplicaciones, así como las propias aplicaciones. .delete() debe utilizarse con extrema precaución. Eliminar un archivo es una operación permanente y no se puede deshacer.
Ejemplo
Desea eliminar un archivo específico en la carpeta de la base de datos:
 $tempo:=File("/PACKAGE/SpecialPrefs/"+Current user+".prefs")
 If($tempo.exists)
    $tempo.delete()
    ALERT("User preference file deleted.")
 End if
.getAppInfo()
Historia
| Lanzamiento | Modificaciones | 
|---|---|
| 20 R9 | Lectura de los UUIDs en los ejecutables macOS | 
| 19 | Añadidos | 
.getAppInfo*() : Object
| Parámetros | Tipo | Descripción | |
|---|---|---|---|
| Resultado | Object | <- | Información del archivo de la aplicación | 
Descripción
La función .getAppInfo() devuelve el contenido de la información de un archivo de aplicación como un objeto.
La función debe ser usada con un archivo existente y soportado: .plist (todas las plataformas), .exe/.dll (Windows), o ejecutable macOS. Si el archivo no existe en el disco o no es un archivo soportado, la función devuelve un objeto vacío (no se genera ningún error).
Objeto devuelto con un archivo .plist (todas las plataformas)
El contenido xml del archivo se analiza y las llaves se devuelven como propiedades del objeto, conservando sus tipos (texto, booleano, numérico). .plist dict se devuelve como un objeto JSON y .plist array se devuelve como un array JSON.
La función sólo admite archivos .plist en formato xml (basados en texto). Se devuelve un error si se utiliza con un archivo .plist en formato binario.
Objeto devuelto con un archivo .exe o .dll (sólo Windows)
Todos los valores de propiedades son de tipo Texto.
| Propiedad | Tipo | 
|---|---|
| InternalName | Text | 
| ProductName | Text | 
| CompanyName | Text | 
| LegalCopyright | Text | 
| ProductVersion | Text | 
| FileDescription | Text | 
| FileVersion | Text | 
| OriginalFilename | Text | 
Objeto devuelto con un archivo ejecutable macOS (solo macOS)
Un archivo ejecutable macOS se encuentra dentro de un paquete (por ejemplo, myApp.app/Contents/MacOS/myApp).
La función devuelve un objeto archs que contiene una colección de objetos que describen cada arquitectura encontrada en el ejecutable (un gran ejecutable puede integrar varias arquitecturas). Cada objeto de la colección contiene las siguientes propiedades:
| Propiedad | Tipo | Descripción | 
|---|---|---|
| name | Text | Nombre de la arquitectura ("arm64" o "x86_64") | 
| type | Number | Identificador numérico de la arquitectura | 
| uuid | Text | Representación textual del uuid del ejecutable | 
Ejemplo 1
  // mostrar información de derechos de autor de una info.plist (cualquier plataforma)
var $infoPlistFile : 4D.File
var $info : Object
$infoPlistFile:=File("/RESOURCES/info.plist")
$info:=$infoPlistFile.getAppInfo()
ALERT($info.Copyright)
Ejemplo 2
 // mostrar información de copyright del archivo .exe de aplicación (windows)
var $exeFile : 4D.File
var $info : Object
$exeFile:=File(Application file; fk platform path)
$info:=$exeFile.getAppInfo()
ALERT($info.LegalCopyright)
Ejemplo 3
 // Obtener uuids de una aplicación (macOS)
var $app:=File("/Applications/myApp.app/Contents/MacOS/myApp")
var $info:=$app.getAppInfo()
Resultado en $info:
{
  "archs":
  [
      {
        "name":"x86_64",
        "type":16777223,
        "uuid":"3840983CDA32392DA4D1D32F08AB3212"
      },
      {
        "name":"arm64",
        "type":16777228,
        "uuid":"E49F6BA275B931DDA183C0B0CDF0ADAF"
      }
  ]
}
Ver también
.moveTo()
Historia
| Lanzamiento | Modificaciones | 
|---|---|
| 17 R5 | Añadidos | 
.moveTo*( destinationFolder : 4D.Folder { ; newName : Text } ) : 4D.File
| Parámetros | Tipo | Descripción | |
|---|---|---|---|
| destinationFolder | 4D.Folder | -> | Carpeta de destino | 
| newName | Text | -> | Nombre completo del archivo trasladado | 
| Resultado | 4D.File | <- | Archivo movido | 
Descripción
La función .moveTo() mueve o renombra el objeto File en la carpeta especificada destinationFolder.
La destinationFolder debe existir en el disco, de lo contrario se genera un error.
Por defecto, el archivo conserva su nombre cuando se mueve. Si desea renombrar el archivo desplazado, pase el nombre completo en el parámetro newName. El nuevo nombre debe cumplir con las reglas de nomenclatura (por ejemplo, no debe contener caracteres como ":", "/", etc.), de lo contrario se devuelve un error.
Objeto devuelto
El objeto File movido.
Ejemplo
$DocFolder:=Folder(fk documents folder)
$myFile:=$DocFolder.file("Current/Infos.txt")
$myFile.moveTo($DocFolder.folder("Archives");"Infos_old.txt")
.open()
Historia
| Lanzamiento | Modificaciones | 
|---|---|
| 19 R7 | Añadidos | 
.open*( { mode : Text } ) : 4D.FileHandle
.open( { options : Object } ) : 4D.FileHandle
| Parámetros | Tipo | Descripción | |
|---|---|---|---|
| mode | Text | -> | Modo de apertura: "read", "write", "append" | 
| options | Object | -> | Opciones de apertura | 
| Resultado | 4D.FileHandle | <- | Nuevo objeto File handle | 
Descripción
La función .open() crea y devuelve un nuevo objeto 4D.FileHandle en el archivo, en el modo especificado o con las opciones especificadas. Puede utilizar las funciones y propiedades de la clase 4D.FileHandle para escribir, leer o añadir contenido al archivo.
Si utiliza el parámetro mode (texto), pase el modo de apertura para el file handle:
| mode | Descripción | 
|---|---|
| "read" | (Por defecto) Crea un file handle para leer los valores en el archivo. Si el archivo no existe en el disco, se devuelve un error. Puede abrir tantos file handles como quiera en modo "read" en el mismo objeto File. | 
| "write" | Crea un file handle para escribir valores en el archivo (empezando por el inicio del contenido del archivo). Si el archivo no existe en el disco, se crea. Sólo se puede abrir un file handle en modo "write" en el mismo objeto File. | 
| "append" | Crea un file handle para escribir los valores en el archivo (empezando por el final del contenido del archivo). Si el archivo no existe en el disco, se crea. Sólo se puede abrir un file handle en modo "append" en el mismo objeto File. | 
El valor de mode es sensible a las mayúsculas y minúsculas.
Si utiliza el parámetro options (object), puede pasar más opciones para el file handle a través de las siguientes propiedades (estas propiedades se pueden leer después desde el objeto file handle abierto):
| options | Tipo | Descripción | Por defecto | 
|---|---|---|---|
| .mode | Text | Modo de apertura (ver mode arriba) | "read" | 
| .charset | Text | Conjunto de caracteres utilizado al leer o escribir en el archivo. Utilice el nombre estándar del conjunto (por ejemplo, "ISO-8859-1" o "UTF-8") | "UTF-8" | 
| .breakModeRead | Texto o número | Modo de procesamiento de los saltos de línea utilizados al leer el archivo (ver abajo) | "native" o 1 | 
| .breakModeWrite | Texto o número | Modo de procesamiento de los saltos de línea utilizados al escribir en el archivo (ver abajo) | "native" o 1 | 
La función reemplaza todos los delimitadores originales de final de línea. Por defecto, se utiliza el delimitador nativo, pero puede definir otro delimitador. Las propiedades .breakModeRead y .breakModeWrite indican el procesamiento a aplicar a los caracteres de fin de línea en el documento. Puede utilizar uno de los siguientes valores (texto o número):
| Modo de ruptura en texto | Break mode en numérico (constante) | Descripción | 
|---|---|---|
| "native" | 1 ( Document with native format) | (Por defecto) Los saltos de línea se convierten al formato nativo del sistema operativo: LF (salto de línea) en macOS, CRLF (retorno de carro + salto de línea) en Windows | 
| "crlf" | 2 ( Document with CRLF) | Los fines de línea se convierten en CRLF (retorno de carro + salto de línea), el formato predeterminado de Windows | 
| "cr" | 3 ( Document with CR) | Los fines de línea se convierten en CR (retorno de carro), el formato clásico por defecto de Mac OS | 
| "lf" | 4 ( Document with LF) | Los fines de línea se convierten en LF (salto de línea), el formato Unix y macOS por defecto | 
El valor del parámetro break mode as text es sensible a las mayúsculas y minúsculas.
Ejemplo
Quiere crear un file handle para leer el archivo "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()
Historia
| Lanzamiento | Modificaciones | 
|---|---|
| 17 R5 | Añadidos | 
.rename*( newName : Text ) : 4D.File
| Parámetros | Tipo | Descripción | |
|---|---|---|---|
| newName | Text | -> | Nuevo nombre completo del archivo | 
| Resultado | 4D.File | <- | Archivo renombrado | 
Descripción
La función .rename() renombra el archivo con el nombre que se ha pasado en newName y devuelve el objeto File renombrado.
El parámetro newName debe cumplir con las reglas de nomenclatura (por ejemplo, no debe contener caracteres como ":", "/", etc.), de lo contrario se devuelve un error. Si ya existe un archivo con el mismo nombre, se devuelve un error.
Tenga en cuenta que la función modifica el nombre completo del archivo, es decir, si no pasa una extensión en newName, el archivo tendrá un nombre sin extensión.
Objeto devuelto
El objeto File renombrado.
Ejemplo
Quiere renombrar "ReadMe.txt" como "ReadMe_new.txt":
 $toRename:=File("C:\\Documents\\Archives\\ReadMe.txt";fk platform path)
 $newName:=$toRename.rename($toRename.name+"_new"+$toRename.extension)
.setAppInfo()
Historia
| Lanzamiento | Modificaciones | 
|---|---|
| 20 R9 | Lectura de los UUIDs en los ejecutables macOS | 
| 20 | Soporte de WinIcon | 
| 19 | Añadidos | 
.setAppInfo*( info : Object )
| Parámetros | Tipo | Descripción | |
|---|---|---|---|
| info | Object | -> | Propiedades para escribir en la información de un archivo de aplicación | 
Descripción
La función .setAppInfo() escribe las propiedades info como contenido informativo de un archivo de aplicación.
La función sólo se puede usar con los siguientes tipos de archivos: .plist (todas las plataformas), existente .exe/.dll (Windows), o ejecutable macOS. Si se usa con otro tipo de archivo o con un archivo .exe/.dll que ya no existe en el disco, la función no hace nada (no se genera ningún error).
Parámetro info con un archivo .plist (todas las plataformas)
La función sólo admite archivos .plist en formato xml (basados en texto). Se devuelve un error si se utiliza con un archivo .plist en formato binario.
Si el archivo .plist ya existe en el disco, se actualiza. De lo contrario, se creará.
Cada propiedad válida definida en el parámetro objeto info se escribe en el archivo .plist en forma de llave. Se aceptan todos los nombre de llaves. Los tipos de valores se conservan cuando es posible.
Si un conjunto de llaves en el parámetro info ya está definido en el archivo .plist, su valor se actualiza manteniendo su tipo original. Las demás llaves existentes en el archivo .plist no se modifican.
Para definir un valor de tipo Fecha, el formato a utilizar es una cadena de timestamp json formada en ISO UTC sin milisegundos ("2003-02-01T01:02:03Z") como en el editor de plist Xcode.
Parámetro objeto info con un archivo .exe o .dll (sólo Windows)
Cada propiedad válida definida en el parámetro objeto info se escribe en el recurso de versión del archivo .exe o .dll. Las propiedades disponibles son (toda otra propiedad será ignorada):
| Propiedad | Tipo | Comentario | 
|---|---|---|
| InternalName | Text | |
| ProductName | Text | |
| CompanyName | Text | |
| LegalCopyright | Text | |
| ProductVersion | Text | |
| FileDescription | Text | |
| FileVersion | Text | |
| OriginalFilename | Text | |
| WinIcon | Text | Ruta Posix del archivo .ico. Esta propiedad sólo se aplica a los archivos ejecutables generados por 4D. | 
Para todas las propiedades excepto WinIcon, si se pasa un texto nulo o vacío como valor, se escribe una cadena vacía en la propiedad. Si pasa un valor de tipo diferente a texto, se convierte en una cadena.
Para la propiedad WinIcon, si el archivo del icono no existe o tiene un formato incorrecto, se genera un error.
Parámetro info con un archivo ejecutable macOS (sólo macOS)
info debe ser un objeto con una única propiedad llamada archs que es una colección de objetos en el formato devuelto por getAppInfo(). Cada objeto debe contener al menos las propiedades type y uuid (name no es usado).
Cada objeto de la colección info.archs debe contener las siguientes propiedades:
| Propiedad | Tipo | Descripción | 
|---|---|---|
| type | Number | Identificador numérico de la arquitectura a modificar | 
| uuid | Text | Representación textual del nuevo uuid ejecutable | 
Ejemplo 1
  // definir algunas llaves en un archivo info.plist (todas las plataformas)
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" //para macOS
$infoPlistFile.setAppInfo($info)
Ejemplo 2
  // definir el copyright y versión de un archivo .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)
Ejemplo 3
// regenerar uuids de una aplicación (macOS)
// leer uuids de myApp 
var $app:=File("/Applications/myApp.app/Contents/MacOS/myApp")
var $info:=$app.getAppInfo()
// regenera los uuids para todas las arquitecturas
For each ($i; $info.archs)
	$i.uuid:=Generate UUID
End for each 
// actualiza la app con los nuevos uuids
$app.setAppInfo($info)
Ver también
.setContent()
Historia
| Lanzamiento | Modificaciones | 
|---|---|
| 17 R5 | Añadidos | 
.setContent* ( content : Blob )
| Parámetros | Tipo | Descripción | |
|---|---|---|---|
| content | BLOB | -> | Nuevos contenidos del archivo | 
Descripción
La función .setContent( ) reescribe todo el contenido del archivo utilizando los datos almacenados en el BLOB content. Para obtener información sobre BLOBs, consulte la sección BLOB.
Ejemplo
 $myFile:=Folder(fk documents folder).file("Archives/data.txt")
 $myFile.setContent([aTable]aBlobField)
.setText()
Historia
| Lanzamiento | Modificaciones | 
|---|---|
| 19 R3 | Por defecto para los nuevos proyectos: sin BOM y (macOS) LF para EOL | 
| 17 R5 | Añadidos | 
.setText* ( text : Text {; charSetName : Text { ; breakMode : Integer } } )
.setText ( text : Text {; charSetNum : Integer { ; breakMode : Integer } } )
| Parámetros | Tipo | Descripción | |
|---|---|---|---|
| text | Text | -> | Texto a almacenar en el archivo | 
| charSetName | Text | -> | Nombre del juego de caracteres | 
| charSetNum | Integer | -> | Número del conjunto de caracteres | 
| breakMode | Integer | -> | Modo de tratamiento de los saltos de línea | 
Descripción
La función .setText()  escribe text como el nuevo contenido del archivo.
Si el archivo referenciado en el objeto File no existe en el disco, la función lo crea. Cuando el archivo ya existe en el disco, se borra su contenido anterior, excepto si ya está abierto, en cuyo caso se bloquea su contenido y se genera un error.
En text, pase el texto a escribir en el archivo. Puede ser un texto literal ("my text"), o un campo / variable texto 4D.
Opcionalmente, puede designar el conjunto de caracteres que se utilizará para la escritura del contenido. Puede pasar:
- en charSetName, una cadena que contiene el nombre del conjunto estándar (por ejemplo "ISO-8859-1" o "UTF-8"),
- o en charSetNum, el ID MIBEnum (número) del nombre del conjunto estándar.
Para conocer la lista de los conjuntos de caracteres que soporta 4D, consulte la descripción del comando
CONVERT FROM TEXT.
Si existe una marca de orden de bytes (BOM) para el conjunto de caracteres, 4D la inserta en el archivo a menos que el conjunto de caracteres utilizado contenga el sufijo "-no-bom" (por ejemplo, "UTF-8-no-bom"). Si no especifica un conjunto de caracteres, por defecto 4D utiliza el conjunto de caracteres "UTF-8" sin BOM.
En breakMode, se puede pasar un número que indica el procesamiento a aplicar a los caracteres de fin de línea antes de guardarlos en el archivo. Las siguientes constantes, que se encuentran en el tema Documentos sistema, están disponibles:
| Constante | Valor | Comentario | 
|---|---|---|
| Document unchanged | 0 | Sin procesar | 
| Document with native format | 1 | (Por defecto) Los saltos de línea se convierten al formato nativo del sistema operativo: LF (salto de línea) en macOS, CRLF (salto de línea + retorno de carro) en Windows | 
| Document with CRLF | 2 | Los fines de línea se convierten en CRLF (retorno de carro + salto de línea), el formato predeterminado de Windows | 
| Document with CR | 3 | Los fines de línea se convierten en CR (retorno de carro), el formato clásico por defecto de Mac OS | 
| Document with LF | 4 | Los fines de línea se convierten en LF (salto de línea), el formato Unix y macOS por defecto | 
Por defecto, cuando se omite el parámetro breakMode, los saltos de línea se procesan en modo nativo (1).
Nota de compatibilidad: las opciones de compatibilidad están disponibles para la gestión de EOL y de BOM. Ver la página Compatibilidad en doc.4d.com.
Ejemplo
$myFile:=File("C:\\Documents\\Hello.txt";fk platform path)
$myFile.setText("Hello world")