FileStream nesnesinin position özelliği

Adobe AIR 1.0 ve üstü

FileStream nesnesinin position özelliği, sonraki read veya write yönteminde verilerin nereye okunduğunu veya yazıldığını belirler.

Bir okuma veya yazma işleminden önce, position özelliğini dosyada geçerli bir konuma ayarlayın.

Örneğin aşağıdaki kod "hello" dizesini (UTF kodlamada) dosyada konum 8'de yazar:

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

Bir FileStream nesnesini ilk açtığınızda, position özelliği 0'a ayarlıdır.

Bir okuma işleminden önce position değeri en az 0 ve dosyadaki bayt sayısından (dosyadaki varolan konumlar) az olmalıdır.

position özelliğinin değeri yalnızca aşağıdaki durumlarda değiştirilir:

  • position özelliğini açık olarak ayarladığınızda.

  • Bir read yöntemini çağırdığınızda.

  • Bir write yöntemini çağırdığınızda.

FileStream nesnesinin read veya write yöntemini çağırdığınızda, position özelliği hemen okuduğunuz veya yazdığınız bayt sayısı kadar artırılır. Kullandığınız read yöntemine bağlı olarak, position özelliği okumak için belirttiğiniz bayt sayısı kadar veya kullanılabilir bayt sayısı kadar artırılır. Bir read veya write yöntemini sonradan çağırdığınızda, yeni konumdan başlayarak okur veya yazar.

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          

Ancak bir istisna söz konusudur: Ekleme modunda açılmış bir FileStream için, write yöntemine yapılan bir çağrıdan sonra position özelliği değişmez. (Ekleme modunda veriler, position özelliğinin değerinden bağımsız olarak her zaman dosyanın sonuna yazılır.)

Senkronize olmayan işlemler için açılan bir dosyada, kodun bir sonraki satırı çalıştırılmadan yazma işlemi tamamlanmaz. Ancak birden çok senkronize olmayan yöntemi sıralı olarak çağırabilirsiniz ve çalışma zamanı onları sırayla çalıştırır:

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

Bu kod için izleme çıktısı şöyledir:

started. 
finished.

position değerini bir read veya write yöntemini çağırdıktan hemen sonra (veya istediğiniz zaman) belirtebilirsiniz, böylece bir sonraki okuma veya yazma işlemi o konumdan başlar. Örneğin, aşağıdaki kod position özelliğini writeBytes() işlemine bir çağrı yapıldıktan hemen sonra ayarlar ve yazma işlemi tamamlandıktan sonra bile position o değere ayarlanır (300):

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