2010-03-08 13 views
7

मैं फ्लेक्स उपयोग कर रहा हूँ लोड हो रहा है, स्मृति में एक फ़ाइल को लोड करने FileReference का उपयोग कर,। यह मेरी बुला load() के बाद किसी भी घटनाएँ अपने आप कभी नहीं डिस्पैच -FileReference: नीचे के रूप में विंडोज पर फ़्लैश प्लेयर 10 में एक Windows- बंद कर दिया फ़ाइल

मेरे मुद्दा यह है कि जब एक फ़ाइल Windows के द्वारा अवरोधित किया गया है, मेरे FileReference है नहीं मुझे किसी भी प्रतिक्रिया देने कि फ़ाइल दुर्गम है।

किसी को भी कैसे बताने के लिए कि फ़्लैश प्लेयर फ़ाइल खोलने में असमर्थ है में अंतर्दृष्टि है?

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

मुझे आशा है कि आपको उत्तर मिलेगा। मैं इस बारे में उत्सुक हूं। – Robusto

उत्तर

2

एक संभावित (गंदा) वैकल्पिक हल -let कहना 10 सेकंड के लिए प्रतीक्षा करें, और लगता है कि फ़ाइल उपलब्ध करता है, तो किसी भी स्थिति तो शुरू हो गया है हो सकता है।

का उपयोग करते हुए एक setTimeout (और अपने COMPLETE और *_ERROR घटनाओं संचालकों में clearTimeout साथ उसे साफ़) चाल कर सकता है।

मैं अगर किसी को हालांकि, एक अच्छे समाधान के साथ आ सकता है खुशी होगी।


संपादित करें: बेशक आप HTTP_STATUS घटना को सुनने के लिए चाहते हो सकता है - बल्कि COMPLETE या *_ERROR के लिए इंतज़ार कर की तुलना में (एक 202 जवाब के लिए इंतजार अगर मैं सही ढंग से समझ में आ this documentation)।

+0

यदि आप रीड एक्सेस के लिए फ़ाइल खोलने के लिए CreateFile API का उपयोग करके Win32 एपीआई तक पहुंच सकते हैं और गीलेर की जांच कर सकते हैं तो यह एक वैध हैंडलर लौटाता है या नहीं। लेकिन इसके बिना ... आपका कामकाज जाने का एकमात्र तरीका लगता है। एक आंतरिक 'Timer' उदाहरण है कि लोड पर शुरू कर दिया है के साथ विस्तार' FileReference', "पूरा होने के" पर बंद कर दिया (पूर्ण या त्रुटि), और प्रगति पर रीसेट - – user97863

+0

इस तरह से मैं इसे से निपटने के समाप्त हो गया है। यदि टाइमर समाप्त हो जाता है, तो लोड रद्द हो जाता है और टाइमआउट ईवेंट भेज दिया जाता है। –

+0

(मैंने HTTP_STATUS ईवेंट का उपयोग नहीं किया क्योंकि मुझे केवल स्थानीय मशीन से फ़ाइलों में दिलचस्पी है; उस मामले में कोई HTTP ईवेंट नहीं निकाला जा सकता है।) –