Aller au contenu principal
Version: 20 R5 BETA

FileHandle

The FileHandle class has functions that allow you to sequentially read from or append contents to an opened File object. Un handle de fichier peut accéder à n'importe quelle partie d'un document.

File handle objects are created with the file.open() function.

To read or write a whole document at once, you might consider using the file.getText() and file.setText() functions.

Thanks to the standard 4D object refcounting, a file handle is automatically deleted when it is no longer referenced and thus, the requested File object is automatically closed. Par conséquent, avec les file handles, vous n'avez pas à vous soucier de la fermeture des documents.

note

Les ressources d'un objet, telles que les documents, sont libérées lorsqu'il n'y a plus de références en mémoire, ce qui se produit par exemple à la fin de l'exécution de la méthode pour les variables locales. If you want to "force" the release of object resources at any moment, you can nullify its references.

Exemple

var $f : 4D.File
var $fhandle : 4D.FileHandle
$f:=Folder(Database folder).file("example.txt")

//Writing line by line from the start
$fhandle:=$f.open("write")
$text:="Hello World"
For ($line; 1; 4)
$fhandle.writeLine($text+String($line))
End for

//Writing line by line from the end
$fhandle:=$f.open("append")
$text:="Hello New World!"
For ($line; 1; 4)
$fhandle.writeLine($text+String($line))
End for

//Reading using a stop character and an object parameter
$o:=New object()
$o.mode:="read"
$o.charset:="UTF-8"
$o.breakModeRead:=Document with CRLF
$stopChar:="!"
$fhandle:=$f.open($o)
$text:=$fhandle.readText($stopChar)

//Reading line by line
$lines:=New collection
$fhandle:=$f.open("read")
While (Not($fhandle.eof))
$lines.push($fhandle.readLine())
End while

Objet FileHandle

Les objets de type File handle ne peuvent pas être partagés.

.breakModeRead : Text
the processing mode for line breaks used when reading the file
.breakModeWrite : Text
the processing mode for line breaks used when writing to the file
.charset : Text
the charset used when reading from or writing to the file
.eof : Boolean
True is the offset has reached the end of the file, and False otherwise
.file : 4D.File
the 4D.File object on which the handle has been created
.getSize() : Real
returns the current size of the document, expressed in bytes
.mode : Text
the mode in which the file handle was created: "read", "write", or "append"
.offset : Real
the current offset of the data stream (position inside the document)
.readBlob( bytes : Real ) : [4D.Blob](BlobClass)
returns a blob a bytes size from the file, starting from the current position
.readLine() : Text
returns a line of text from the current position until an end-of-line delimiter is encountered or the end of the document is reached
.readText( { stopChar : Text } ) : Text
returns text from the file, starting from the current position until the first stopChar string is encountered (if passed) or the end of file is reached
.setSize( size : Real )
sets a new size in bytes for the document
.writeBlob( blob : 4D.Blob )
writes blob into the file, starting from the current position
.writeLine( lineOfText : Text )
writes lineOfText content at the current position and inserts an end-of-line delimiter
.writeText( textToWrite : Text )
writes textToWrite content at the current position and does not insert a final end-of-line delimiter

.breakModeRead

Historique
ReleaseModifications
19 R7Ajout

.breakModeRead : Text

Description

The .breakModeRead property returns the processing mode for line breaks used when reading the file.

The .breakModeRead property can be defined at the handle creation with the file.open() function (see the .open() function for more information). La valeur par défaut est "native".

The .breakModeRead property always contains a text value, even if the .open() option was set using a number (constant).

Cette propriété est en lecture seule.

.breakModeWrite

Historique
ReleaseModifications
19 R7Ajout

.breakModeWrite : Text

Description

The .breakModeWrite property returns the processing mode for line breaks used when writing to the file.

The .breakModeWrite property can be defined at the handle creation with the file.open() function (see the .open() function for more information). La valeur par défaut est "native".

The .breakModeWrite property always contains a text value, even if the .open() option was set using a number (constant).

Cette propriété est en lecture seule.

.charset

Historique
ReleaseModifications
19 R7Ajout

.charset : Text

Description

The .charset property returns the charset used when reading from or writing to the file.

The charset can be defined at the handle creation with the file.open() function. La valeur par défaut est "UTF-8".

Cette propriété est en lecture seule.

.eof

Historique
ReleaseModifications
19 R7Ajout

.eof : Boolean

Description

The .eof property returns True is the offset has reached the end of the file, and False otherwise.

Cette propriété est en lecture seule.

.file

.file : 4D.File

Description

The .file property returns the 4D.File object on which the handle has been created.

Cette propriété est en lecture seule.

.getSize()

Historique
ReleaseModifications
19 R7Ajout

.getSize() : Real

ParamètresTypeDescription
RésultatReal<-Taille du document en octets

Description

The .getSize() function returns the current size of the document, expressed in bytes.

This function returns the same value as the (.size) property of the File class.

Voir également

.setSize(), file.size

.mode

Historique
ReleaseModifications
19 R7Ajout

.mode : Text

Description

The .mode property returns the mode in which the file handle was created: "read", "write", or "append".

The mode can be defined at the handle creation with the file.open() function. La valeur par défaut est "read".

Cette propriété est en lecture seule.

.offset

Historique
ReleaseModifications
19 R7Ajout

.offset : Real

Description

The .offset property returns the current offset of the data stream (position inside the document). La valeur de l'offset est automatiquement mise à jour après les opérations de lecture et d'écriture.

Setting the .offset will change its current value at the moment of the next read or write operation.

  • If the passed value is negative, the .offset is set to the start of the file (zero).
  • If the passed value is higher than the size of the file, the .offset is set to the end of the file (size of file).

This property is read/write.

caution

When a file handle is created, the .offset value is a number of bytes. However, the unit of offset measurement differs according to the reading function: with readBlob(), .offset is a number of bytes, whereas with readText()/readLine() it is a number of characters. Selon le jeu de caractères du fichier, un caractère correspond à un ou plusieurs octets. So, if you start reading with readBlob() and then call readText(), text reading will start at an inconsistent position. It is therefore essential to set the .offset property yourself if you switch from reading/writing blob to reading/writing text in the same filehandle. Par exemple :

  // Open a european text file using utf-16 encoding (two bytes per character)
// We want to read the first 10 characters as bytes, then the remaining as text.
$fh:=File("/RESOURCES/sample_utf_16.txt").open()
// read the 20 first bytes (i.e. 10 characters)
$b:=$fh.readBlob(20) // $fh.offset=20
// then read all text skipping the first 10 characters we just read in previous blob
// because we are now reading text instead of bytes, the meaning of 'offset' is not the same.
// We need to translate it from bytes to characters.
$fh.offset:=10 // ask to skip 10 utf-16 characters (20 bytes)
$s:=$fh.readText()

.readBlob()

Historique
ReleaseModifications
19 R7Ajout

.readBlob( bytes : Real ) : 4D.Blob

ParamètresTypeDescription
bytesReal->Nombre d'octets à lire
Résultat4D.Blob<-Octets lus depuis le fichier

Description

The .readBlob() function returns a blob a bytes size from the file, starting from the current position .

When this function is executed, the current position (.offset) is updated after the last byte read.

Voir également

.writeBlob()

.readLine()

Historique
ReleaseModifications
19 R7Ajout

.readLine() : Text

ParamètresTypeDescription
RésultatText<-Ligne de texte

Description

The .readLine() function returns a line of text from the current position until an end-of-line delimiter is encountered or the end of the document is reached.

When this function is executed, the current position (.offset) is updated.

Warning

This function assumes that the .offset property is a number of characters, not a number of bytes. For more information, see the .offset description.

Lorsque cette fonction est exécutée pour la première fois sur un file handle, le contenu entier du document est chargé dans un buffer.

Voir également

.readText(), .writeLine()

.readText()

Historique
ReleaseModifications
19 R7Ajout

.readText( { stopChar : Text } ) : Text

ParamètresTypeDescription
stopCharText->Caractère(s) au(x)quel(s) arrêter la lecture
RésultatText<-Texte du fichier

Description

The .readText() function returns text from the file, starting from the current position until the first stopChar string is encountered (if passed) or the end of file is reached.

The stopChar character string is not included in the returned text. If you omit the stopChar parameter, the whole document text is returned.

When this function is executed, the (.offset) is placed just after the stopChar string.

Warning

This function assumes that the .offset property is a number of characters, not a number of bytes. For more information, see the .offset description.

If the stopChar parameter is passed and not found, .readText() returns an empty string and the .offset is left untouched.

Lorsque cette fonction est exécutée pour la première fois sur un file handle, le contenu entier du document est chargé dans un buffer.

Voir également

.readLine(), .writeText()

.setSize()

Historique
ReleaseModifications
19 R7Ajout

.setSize( size : Real )

ParamètresTypeDescription
sizeReal->Nouvelle taille du document en octets

Description

The .setSize() function sets a new size in bytes for the document.

If the size value is less than the current document size, the document content is truncated from the beginning to get the new size .

Voir également

.getSize(), file.size

.writeBlob()

Historique
ReleaseModifications
19 R7Ajout

.writeBlob( blob : 4D.Blob )

ParamètresTypeDescription
blob4D.Blob->Blob à écrire dans le fichier

Description

The .writeBlob() function writes blob into the file, starting from the current position .

When this function is executed, the current position (.offset) is updated after the last byte written.

Voir également

.readBlob()

.writeLine()

Historique
ReleaseModifications
19 R7Ajout

.writeLine( lineOfText : Text )

ParamètresTypeDescription
lineOfTextText->Texte à écrire

Description

The .writeLine() function writes lineOfText content at the current position and inserts an end-of-line delimiter (unlike the .writeText() function). By default, a native end-of-line delimiter is used, but you can define another delimiter when opening the file handle by setting the .breakModeWrite property.

When this function is executed, the current position (.offset) is updated after the end-of-line delimiter.

Voir également

.breakModeWrite, .readLine(), .writeText()

.writeText()

Historique
ReleaseModifications
19 R7Ajout

.writeText( textToWrite : Text )

ParamètresTypeDescription
textToWriteText->Texte à écrire

Description

The .writeText() function writes textToWrite content at the current position and does not insert a final end-of-line delimiter (unlike the .writeLine() function). By default, the native delimiter is used, but you can define another delimiter when opening the file handle by setting the .breakModeWrite property.

When this function is executed, the current position (.offset) is updated after the next end-of-line delimiter.

Voir également

.breakModeWrite, .readText(), .writeLine()