La propriété
position
d’un objet FileStream détermine l’emplacement de lecture ou d’écriture des données de la méthode de lecture ou d’écriture suivante.
Préalablement à une opération de lecture ou d’écriture, définissez la propriété
position
sur une position valide dans le fichier.
Par exemple, le code suivant écrit la chaîne
"hello"
(au codage UTF) à la position 8 dans le fichier :
var myFile:File = File.documentsDirectory.resolvePath("AIR Test/test.txt");
var myFileStream:FileStream = new FileStream();
myFileStream.open(myFile, FileMode.UPDATE);
myFileStream.position = 8;
myFileStream.writeUTFBytes("hello");
Lorsque vous ouvrez initialement un objet FileStream, la propriété
position
est définie sur 0.
Avant une opération de lecture, la valeur de la propriété
position
doit être comprise entre 0 et le nombre maximal d’octets du fichier (autrement dit, une position existante dans le fichier).
La valeur de la propriété
position
est uniquement modifiée dans les cas suivants :
-
Vous définissez explicitement la propriété
position
.
-
Vous appelez une méthode de lecture.
-
Vous appelez une méthode d’écriture.
Lorsque vous appelez une méthode de lecture ou d’écriture d’un objet FileStream, la propriété
position
est immédiatement incrémentée du nombre d’octets lus ou écrits. Selon la méthode de lecture utilisée, la propriété
position
est incrémentée du nombre d’octets que vous spécifiez pour la lecture ou du nombre d’octets disponibles. Lorsque, par la suite, vous appelez une méthode de lecture ou d’écriture, elle commence la lecture ou l’écriture à la nouvelle position.
var myFile:File = File.documentsDirectory.resolvePath("AIR Test/test.txt");
var myFileStream:FileStream = new FileStream();
myFileStream.open(myFile, FileMode.UPDATE);
myFileStream.position = 4000;
trace(myFileStream.position); // 4000
myFileStream.writeBytes(myByteArray, 0, 200);
trace(myFileStream.position); // 4200
Il existe cependant une exception : si un objet FileStream est ouvert en mode d’ajout en fin de fichier, la propriété
position
ne change pas à la suite de l’appel d’une méthode d’écriture. (Dans ce mode, les données sont toujours ajoutées à la fin du fichier, quelle que soit la valeur de la propriété
position
.)
Si un fichier est ouvert en mode asynchrone, l’opération d’écriture ne se termine pas avant l’exécution de la ligne de code suivante. Vous pouvez néanmoins appeler successivement plusieurs méthodes asynchrones : le moteur d’exécution les exécute dans l’ordre.
var myFile:File = File.documentsDirectory.resolvePath("AIR Test/test.txt");
var myFileStream:FileStream = new FileStream();
myFileStream.openAsync(myFile, FileMode.WRITE);
myFileStream.writeUTFBytes("hello");
myFileStream.writeUTFBytes("world");
myFileStream.addEventListener(Event.CLOSE, closeHandler);
myFileStream.close();
trace("started.");
closeHandler(event:Event):void
{
trace("finished.");
}
La sortie de suivi de ce code est la suivante :
started.
finished.
Il est
possible
de spécifier la valeur de la propriété
position
immédiatement après l’appel d’une méthode de lecture ou d’écriture (ou à tout moment). L’opération de lecture ou d’écriture suivante commence alors à cette position. Par exemple, vous remarquerez que le code suivant définit la propriété
position
immédiatement après un appel de l’opération
writeBytes()
et que la
position
est définie sur cette valeur (300) même à l’issue de l’opération d’écriture :
var myFile:File = File.documentsDirectory.resolvePath("AIR Test/test.txt");
var myFileStream:FileStream = new FileStream();
myFileStream.openAsync(myFile, FileMode.UPDATE);
myFileStream.position = 4000;
trace(myFileStream.position); // 4000
myFileStream.writeBytes(myByteArray, 0, 200);
myFileStream.position = 300;
trace(myFileStream.position); // 300