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