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