Spécification de la position et de la taille du flux

De RAD Studio
Aller à : navigation, rechercher

Remonter à Utilisation des flux


Outre les méthodes de lecture et d'écriture, les flux permettent aux applications de se positionner de manière arbitraire dans le flux ou de changer sa taille. Après un déplacement sur une position spécifiée, l'opération de lecture ou d'écriture suivante démarre la lecture ou l'écriture du flux à cette position.

Déplacement sur une position particulière

La méthode Seek est le mécanisme le plus général pour se déplacer vers une position particulière dans le flux. Il existe deux surcharges pour la méthode Seek :

function Seek(Offset: Longint; Origin: Word): Longint;
function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64;
virtual int __fastcall Seek(int Offset, Word Origin);
virtual __int64 __fastcall Seek(const __int64 Offset, TSeekOrigin Origin);

Les deux surcharges fonctionnent de la même manière. La différence réside dans le fait qu'une version utilise un entier sur 32 bits pour représenter les positions et les décalages, alors que l'autre utilise un entier sur 64 bits.

Le paramètre Origin indique la manière d'interpréter le paramètre Offset. Origin peut prendre l'une des valeurs suivantes :

Valeurs du paramètre Origin :

Valeur Signification

soFromBeginning

Offset part du début de la ressource. Seek se déplace vers la position Offset. Offset doit être >= 0.

soFromCurrent

Offset part de la position en cours dans la ressource. Seek se déplace vers Position + Offset.

soFromEnd

Offset part de la fin de la ressource. Offset doit être <= 0 afin d'indiquer le nombre d'octets avant la fin du fichier.


Seek réinitialise la position en cours dans le flux en la déplaçant du décalage spécifié. Seek renvoie la nouvelle position en cours dans le flux.

Utilisation des propriétés de position et de taille

Tous les flux disposent de propriétés qui contiennent la position en cours et la taille du flux. Ces propriétés sont utilisées par la méthode Seek, ainsi que par toutes les méthodes qui lisent ou écrivent dans le flux.

La propriété Position indique le décalage en cours dans le flux exprimé en octets (à partir du début des données du flux). Position a la déclaration suivante :

property Position: Int64;
__property __int64 Position = {read=GetPosition, write=SetPosition, nodefault};

La propriété Size indique la taille du flux en octets. Elle peut être utilisée pour déterminer le nombre d'octets disponibles pour une lecture, ou pour tronquer les données dans le flux. Size a la déclaration suivante :

property Size: Int64;
__property __int64 Size = {read=GetSize, write=SetSize64, nodefault};

Size est utilisée de manière interne par les routines qui lisent et écrivent dans le flux.

L'initialisation de la propriété Size modifie la taille des données dans le flux. Par exemple, sur un flux de fichier, l'initialisation de Size insère une marque de fin de fichier pour tronquer le fichier. Si la taille du flux ne peut pas être modifiée, une exception est déclenchée. Ainsi, tenter de modifier la taille d'un flux de fichier ouvert en lecture seule déclenche une exception.

Voir aussi