Die position-Eigenschaft eines FileStream-Objekts

Adobe AIR 1.0 und höher

Die position -Eigenschaft eines FileStream-Objekts legt fest, wo Daten mit der nächsten read- oder write-Methode gelesen werden.

Setzen Sie vor einer Lese- oder Schreiboperation die Eigenschaft position auf eine beliebige, gültige Position in der Datei.

Der folgende Code beispielsweise schreibt an der Position 8 in der Datei den String "hello" (in UTF-Kodierung):

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");  

Wenn Sie ein FileStream-Objekt das erste Mal öffnen, wird die Eigenschaft position auf 0 gesetzt.

Vor einer read-Operation muss der Wert von position mindestens 0 sein und weniger als die Anzahl von Byte in der Datei (d. h. vorhandene Positionen in der Datei).

Der Wert der Eigenschaft position wird nur in den folgenden Situationen verändert:

  • Wenn Sie die Eigenschaft position ausdrücklich festlegen.

  • Wenn Sie eine read-Methode aufrufen.

  • Wenn Sie eine write-Methode aufrufen.

Wenn Sie eine read- oder write-Methode eines FileStream-Objekts aufrufen, wird die Eigenschaft position sofort um die Anzahl von Byte hochgezählt, die Sie lesen oder schreiben. Abhängig davon, welche read-Methode Sie verwenden, wird die Eigenschaft position entweder um die Anzahl von Byte hochgezählt, die Sie lesen oder schreiben, oder um die Anzahl verfügbarer Byte. Wenn Sie anschließend eine read- oder write-Methode aufrufen, wird ab der neuen Position gelesen oder geschrieben.

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          

Es gibt jedoch eine Ausnahme: bei einem im Ergänzungsmodus geöffneten FileStream-Objekt wird die Eigenschaft position nach einem Aufruf der write-Methode nicht geändert. (Im Ergänzungsmodus werden die Daten immer ans Dateiende angehängt, unabhängig vom Wert der position -Eigenschaft.)

Bei einer Datei, die für asynchrone Operationen geöffnet wurde, wird die write-Operation erst nach der Ausführung der nächsten Codezeile abgeschlossen. Sie können jedoch mehrere asynchrone Methoden nacheinander aufrufen und die Laufzeitumgebung wird sie in der angeführten Reihenfolge ausführen:

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."); 
}

Die Trace-Ausgabe für diesen Code ist folgendermaßen:

started. 
finished.

Sie können den position -Wert unmittelbar nach dem Aufruf einer read- oder write-Methode angeben (oder zu einem beliebigen anderen Zeitpunkt) und die nächste read- oder write-Operation wird ab dieser Position ausgeführt. Beachten Sie beispielsweise, dass der folgende Code die position -Eigenschaft unmittelbar nach dem Aufruf einer writeBytes() -Operation gesetzt wird, und zwar auf den betreffenden Wert ( 300 ), sogar nachdem die write-Operation abgeschlossen ist:

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