Propriété position d’un objet FileStream

Adobe AIR 1.0 et les versions ultérieures

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