【问题标题】:FileReference: Loading a Windows-locked fileFileReference:加载 Windows 锁定的文件
【发布时间】:2010-03-08 20:28:17
【问题描述】:

我在 Windows 上的 Flash Player 10 中使用 Flex,使用 FileReference 将文件加载到内存中,如下所示。

我的问题是,当一个文件被 Windows 锁定时,我的FileReference 没有给我任何关于该文件不可访问的反馈——它根本不会在我调用load() 之后调度任何事件。

有没有人知道如何判断 Flash Player 无法打开文件?

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());
}

【问题讨论】:

  • 希望您能得到答复。我自己也对这个很好奇。

标签: windows apache-flex flash actionscript-3 filereference


【解决方案1】:

一个可能的(肮脏的)解决方法可能是等待 - 比如说 - 10 秒,然后假设如果没有触发任何事件,则该文件不可用。

使用setTimeout(并在COMPLETE*_ERROR 事件处理程序中使用clearTimeout 清除它)可能会成功。

不过,如果有人能提出更好的解决方案,我会很高兴。


编辑:当然,您可能想听HTTP_STATUS 事件(等待 202 答案 - 如果我正确理解了this documentation)而不是等待COMPLETE*_ERROR

【讨论】:

  • 如果您可以访问 win32 api 会更容易,使用 CreateFile API 打开文件以进行读取访问并检查它是否返回有效的处理程序。但没有那个......你的解决方法听起来是唯一的方法。
  • 这就是我最终处理它的方式——使用内部 Timer 实例扩展 FileReference,该实例在加载时启动,在“完成”(完成或错误)时停止,然后重新设置进步。如果计时器用完,则取消加载并调度超时事件。
  • (我没有使用 HTTP_STATUS 事件,因为我只对来自本地计算机的文件感兴趣;在这种情况下似乎没有触发任何 HTTP 事件。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多