FileReference: Loading a Windows-locked file

actionscript-3, apache-flex, filereference, flash, windows

Solution

A possible (dirty) workaround might be to wait for -let say- 10 seconds, and suppose that the file isn't available if no event has triggered then.

Using a `setTimeout` (and clearing it with `clearTimeout` in your `COMPLETE` and `*_ERROR` events handlers) might do the trick.

I'll be glad if someone could come up with a nicer solution, though.

EDIT: Of course you might want to listen to `HTTP_STATUS` event (waiting for a 202 answer - if I understood this documentation correctly) rather than waiting for `COMPLETE` or `*_ERROR`.

Problem

I'm using Flex in Flash Player 10 on Windows, using `FileReference` to load a file into memory, as below. My issue is that when a file is locked by Windows, my `FileReference` is not giving me any feedback that the file is inaccessible--it simply never dispatches any events after my calling `load()`. Does anyone have insight into how to tell that Flash Player is unable to open the file? ``` 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()); } ```

Original source