2010-03-08 17 views
7

Aşağıdaki gibi, bir dosyayı belleğe yüklemek için FileReference kullanarak Windows'ta Flash Player 10'da Flex kullanıyorum.FileReference: Windows kilitli bir dosya yükleniyor

Sorunum, bir dosya Windows tarafından kilitlendiğinde, FileReference, dosyaya erişilemediğine dair bana herhangi bir geri bildirim vermediğidir; bu, load() numaralı çağrıdan sonra hiçbir zaman hiçbir olayı göndermez.

Herhangi birinin, Flash Player'ın dosyayı açamadıklarını nasıl anlatacakları konusunda bir bilgisi var mı?

var fileReference:FileReference = new FileReference(); 

private function onClick():void { 
    fileReference = new FileReference(); 
    fileReference.addEventListener(Event.SELECT, onSelect); 
    fileReference.addEventListener(Event.COMPLETE, onComplete); 

    fileReference.addEventListener(Event.CANCEL, onOther); 
    fileReference.addEventListener(IOErrorEvent.IO_ERROR, onOther); 
    fileReference.addEventListener(ProgressEvent.PROGRESS, onOther); 
    fileReference.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onOther); 
    // I've tried adding all of the other declared events 
    // for FileReference here as well 

    fileReference.browse(); 
} 

private function onSelect(event:Event):void { 
    trace(fileReference.name); 

    try { 
     fileReference.load(); 
    } catch (e:Error) { 
     trace(e); 
    } 
} 

private function onComplete(event:Event):void { 
    trace(fileReference.data.length); 
} 

private function onOther(event:Event):void { 
    trace("other:" + event.toString()); 
} 
+0

Umarım bir cevap alırsınız. Bunu kendim merak ediyorum. – Robusto

cevap

2

muhtemel bir (kirli) geçici çözüm -Şimdi say-10 saniye bekleyin ve hiçbir olay daha sonra tetikledi, dosya kullanılabilir olmadığını varsaymak olabilir. Kullanılması

bir setTimeout (ve COMPLETE ve *_ERROR olaylar işleyicilerindeki clearTimeout ile takas) hile yapabilir.

Eğer birisi daha güzel bir çözüm bulabilirse sevinirim.


DÜZENLEME: Tabii ki HTTP_STATUS etkinliğini dinlemek isteyebilir (bir 202 cevap bekliyor - Ben doğru this documentation anlamış ise) yerine COMPLETE veya *_ERROR beklemek yerine.

+0

Win32 api'ye erişebilecekseniz, okuma erişimi için dosyayı açmak ve geçerli bir işleyiciyi döndürüp döndürmediğini kontrol etmek için CreateFile API kullanarak daha kolay olurdu. Ama bu olmadan ... çözümünüz gitmenin tek yolu gibi görünüyor. – user97863

+0

Yüklemeyi başlatan bir "Timer" örneğiyle "FileReference" i genişletmek, "completeion" (tamamlandı veya hata) üzerinde durdu ve ilerlemeyi sıfırlamak için kullanıyorum. Zamanlayıcı tükenirse, yük iptal edilir ve bir zaman aşımı olayı gönderilir. –

+0

(HTTP_STATUS olayını kullanmadım çünkü yalnızca yerel makinedeki dosyalarla ilgileniyorum; bu durumda hiçbir HTTP olayı işlenmiyor gibi görünüyor.) –

İlgili konular