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