Egenskapen position för ett FileStream-objekt

Adobe AIR 1.0 och senare

Egenskapen position för ett FileStream-objekt fastställer var data läses eller skrivs vid nästa read- eller write-metod.

Före en read- eller write-åtgärd ska du ange egenskapen position till en giltig position i filen.

Följande kod skriver strängen "hello" (med UTF-kodning) vid position 8 i filen:

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

När du först öppnar ett FileStream-objekt ställs egenskapen position in på 0.

Före en read-åtgärd måste värdet för position vara minst 0 och mindre än antalet byte i filen (som är de befintliga positionerna i filen).

Värdet på egenskapen position ändras bara under följande omständigheter:

  • När du ställer in egenskapen position uttryckligen.

  • När du anropar en read-metod.

  • När du anropar en write-metod.

När du anropar en read- eller write-metod för ett FileStream-objekt ökas egenskapen position omedelbart med antalet byte som du läser eller skriver. Beroende på vilken read-metod som du använder ökas egenskapen position med antalet byte som du anger ska läsas eller antalet tillgängliga byte. När du anropar en read- eller write-metod efter en annan, börjar den läsa eller skriva vid den nya positionen.

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          

Det finns emellertid ett undantag: för ett FileStream-objekt i tilläggsläge ändras inte egenskapen position efter ett anrop till en write-metod. (I tilläggsläge skrivs data alltid i slutet på filen, oberoende av värdet på egenskapen position .)

För en fil som öppnas för asynkrona åtgärder slutförs write-åtgärden inte förrän nästa kodrad körs. Du kan emellertid anropa flera asynkrona metoder i rad, så körs de i ordning:

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

Trace-utdata för den här koden ser ut så här:

started. 
finished.

Du kan ange position -värdet omedelbart efter att du har anropat en read- eller write-metod (eller när som helst), så att nästa read- eller write-åtgärd sker vid den positionen. Observera att följande kod ställer in egenskapen position direkt efter ett anrop till writeBytes() -åtgärden, och att position ställs in på det värdet (300) även efter att write-åtgärden är klar:

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