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 |
![]() |