【问题标题】:How can I detect when any file changes under a directory in AIR?如何检测 AIR 目录下的任何文件何时更改?
【发布时间】:2011-11-23 04:05:25
【问题描述】:

我见过使用计时器、获取文件列表并检查每个文件是否有更改的示例,但有没有更简单的方法来执行此操作,例如...

<mx:FileSystemList id="fs" visible="false" />

private function onCreationComplete():void
{
    fs.directory = File.applicationDirectory.resolvePath('../../assets');
    if (fs.directory.exists)
      addEventListener(FileEvent.DIRECTORY_CHANGE, onDirectoryChange);
}

private function onDirectoryChange(e:FileEvent):void
{
    trace("file was changed");
}

这似乎不会在文件更改时触发

【问题讨论】:

    标签: flash actionscript-3 file air directory


    【解决方案1】:

    使用 FileMonitor 类。

    http://www.mikechambers.com/blog/2009/03/11/monitoring-file-changes-in-adobe-air/

    教程中的代码:

    import com.adobe.air.filesystem.FileMonitor;
    import flash.filesystem.File;
    import flash.events.Event;
    import com.adobe.air.filesystem.events.FileMonitorEvent;
    
    private var monitor:FileMonitor;
    
    private function onSelectButtonClick():void
    {
        var f:File = File.desktopDirectory;
        f.addEventListener(Event.SELECT, onFileSelect);
        f.browseForOpen("Select a File to Watch.");
    }
    
    private function onFileSelect(e:Event):void
    {
        var file:File = File(e.target);
    
        if(!monitor)
        {
            monitor = new FileMonitor();
            monitor.addEventListener(FileMonitorEvent.CHANGE, onFileChange);
            monitor.addEventListener(FileMonitorEvent.MOVE, onFileMove);
            monitor.addEventListener(FileMonitorEvent.CREATE, onFileCreate);
        }
    
        monitor.file = file;
        monitor.watch();
    }
    
    private function onFileChange(e:FileMonitorEvent):void
    {
        trace("file was changed");
    }
    
    private function onFileMove(e:FileMonitorEvent):void
    {
        trace("file was moved");
    }
    
    private function onFileCreate(e:FileMonitorEvent):void
    {
        trace("file was created");
    }
    

    【讨论】:

    • 是的。我知道那个方法。它使用计时器并检查文件,它只支持一个文件。
    • 天哪,我什至从未查看过 FileMonitor 类的源代码,你说得对,它确实使用了计时器。这太荒谬了。不幸的是,我认为您不走运,除非您编写一个可以实际监控文件系统并使用 AIR 中的本机进程 API 与之交互的本机可执行文件。
    • 但是我还必须注意,最有可能的原生解决方案还包括某种计时器功能,或者需要接收事件,该事件也是由某种计时器功能生成的。其原因仅仅是可执行进程的性质。它们总是可以归结为一个无限循环,允许并检查状态变化。
    • AIR 3 将允许本地可执行文件,即 Windows 的 DLL。坚持住,应该在 10 月初出来。
    • 我认为您对 xLite 感到困惑。 AIR 3 将允许捆绑运行时,因此您可以将 AIR 运行时捆绑到可执行安装程序包中。 AIR 2.0 已经允许您从 actionscript 运行本机可执行文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-14
    • 1970-01-01
    • 2020-11-29
    • 1970-01-01
    相关资源
    最近更新 更多