Egenskapen position för ett FileStream-objektAdobe 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 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
|
|