La proprietà position di un oggetto FileStream

Adobe AIR 1.0 e versioni successive

La proprietà position di un oggetto FileStream determina dove i dati vengono letti o scritti con il metodo di lettura o scrittura successivo.

Prima delle operazioni di lettura o scrittura, impostate la proprietà position su qualsiasi posizione valida nel file.

Ad esempio, il codice seguente scrive la stringa "hello" (in codice UTF) nella posizione 8 del file:

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

Quando si apre un oggetto FileStream per la prima volta, la proprietà position è impostata su 0.

Prima di un'operazione di lettura, il valore di position deve essere almeno 0 e inferiore al numero di byte presenti nel file (che corrispondono alle posizioni esistenti nel file).

Il valore della proprietà position viene modificato solo nelle seguenti condizioni:

  • Quando si imposta esplicitamente la proprietà position

  • Quando si chiama un metodo di lettura

  • Quando si chiama un metodo di scrittura

Quando si chiama un metodo di lettura o scrittura di un oggetto FileStream, la proprietà position viene immediatamente incrementata dal numero di byte letti o scritti. A seconda del metodo di lettura utilizzato, la proprietà position viene incrementata per il numero di byte specificati per la lettura o per il numero di byte disponibili. Quando si chiama successivamente un metodo di lettura o scrittura, la lettura o scrittura inizia nella nuova posizione.

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          

Vi è, tuttavia, un'eccezione: per un FileStream aperto in modalità di aggiunta, la proprietà position non cambia dopo una chiamata a un metodo di scrittura. (Nella modalità di aggiunta, i dati sono sempre scritti alla fine del file, indipendentemente dal valore della proprietà position .)

Per un file aperto per operazioni asincrone, l'operazione di scrittura non si completa prima dell'esecuzione della riga di codice successiva. Tuttavia, è possibile chiamare più metodi asincroni in modo sequenziale e il runtime li esegue in ordine:

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

L'output di tracciamento di questo codice è il seguente:

started. 
finished.

È possibile specificare il valore position subito dopo aver chiamato un metodo di lettura o scrittura (o in qualsiasi momento), e la successiva operazione di lettura o scrittura avrà luogo a partire da tale posizione. Ad esempio, notate che il codice seguente imposta la proprietà position subito dopo una chiamata all'operazione writeBytes() e position è impostata su tale valore (300) anche dopo il completamento dell'operazione di scrittura:

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