Adobe AIR 和不同的操作系统文件系统

Posted

技术标签:

【中文标题】Adobe AIR 和不同的操作系统文件系统【英文标题】:Adobe AIR and different OS filesystems 【发布时间】:2011-06-21 17:30:50 【问题描述】:

向您提出另一个 Adob​​e Air 问题,但首先在这里了解一下我所负责的项目的背景。它是一个 AIR 应用程序,可以从 USB 密钥读取资产,并且必须在 WIN 和 MacOS 上运行。问题是,如何在 MacOS 上将资产加载到应用程序中!听起来很简单,而且可以在 Windows 上无缝运行。

这是我正在尝试做的代码 sn-p:

            var loader:Loader = new Loader(); 
            loader.contentLoaderInfo.addEventListener(Event.COMPLETE, ok);
            loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioError);

            var p:String;

            if (os == "mac")
            
                p = "/Volumes/" + keyVolume.rootDirectory.name + File.separator + "0a0ff0ff-f7ae-4b9c-9637-843b1d6c80e8.jpg";
            
            else
            
                p = keyVolume.rootDirectory.name + File.separator + "0a0ff0ff-f7ae-4b9c-9637-843b1d6c80e8.jpg";
            

            var temp:File = new File(p);
            Debugger.Display.text += "\nAttempting to load: " + p;
            Debugger.Display.text += "\nDoes it exist? " + temp.exists;
            loader.load(new URLRequest(p));

...变量 OS 和 keyVolume 已在早期代码中成功设置。此外,我还为 ok() 和 ioErro() 定义了事件侦听器回调。

当它运行时,它会在 Windows 上打印出来:

尝试加载:G:\0a0ff0ff-f7ae-4b9c-9637-843b1d6c80e8.jpg 是否存在:是的

...然后成功加载资产。

在 MacOS 上,它会打印出来:

尝试加载:/Volumes/AC/0a0ff0ff-f7ae-4b9c-9637-843b1d6c80e8.jpg 是否存在:是的

...然后每次都失败并出现 IOError。

谁能看到我在这里遗漏的东西?我是否有某种权限错误或什么(文件具有“读/写”访问权限)。 USB key 被格式化为 MS-DOS FAT32,会不会有问题?

编辑

我在 MacOS 中将新的 USB 密钥格式化为 FAT16 并将文件放入其中,但没有成功。问题依然存在。

编辑

我现在只是尝试从 /users/-USERNAME-/Desktop 加载资产,但仍然收到相同的错误,所以看起来这不仅仅是 USB 记忆棒的权限问题,它更普遍比那个。

编辑

问题已解决!我终于正确地用了我的谷歌搜索,它是revealed the answer。

这些更改将解决问题:

            var loader:Loader = new Loader(); 
            loader.contentLoaderInfo.addEventListener(Event.COMPLETE, ok);
            loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioError);

            var p:String = keyVolume.rootDirectory.nativePath + ((os == "mac") ? File.separator : "") + "0a0ff0ff-f7ae-4b9c-9637-843b1d6c80e8.jpg";
            var temp:File = new File(p);
            Debugger.Display.text += "\nAttempting to load: " + temp.url;
            Debugger.Display.text += "\nDoes it exist? " + temp.exists;
            loader.load(new URLRequest(temp.url));

我还对涉及操作系统检测的逻辑语句进行了一些细化。

我希望有人觉得这很有用!

【问题讨论】:

FAT32 应该完全没问题。你有更多关于 IOError 的信息吗? 路径中的“AC”有什么区别? MacOS 中的“AC”是驱动器名称。它不考虑 Windows 路径,因为它使用驱动器号。 使用 url 属性而不是 File 类的 nativePath 属性修复了我遇到的 mac 问题!感谢您发布您的发现! 塞缪尔,感谢您的建议。 Mudasir 已经试图劫持答案:) 【参考方案1】:

问题已解决!我终于正确地用了我的谷歌搜索,它是revealed the answer。

这些更改将解决问题:

            var loader:Loader = new Loader(); 
            loader.contentLoaderInfo.addEventListener(Event.COMPLETE, ok);
            loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioError);

            var p:String = keyVolume.rootDirectory.nativePath + ((os == "mac") ? File.separator : "") + "0a0ff0ff-f7ae-4b9c-9637-843b1d6c80e8.jpg";
            var temp:File = new File(p);
            Debugger.Display.text += "\nAttempting to load: " + temp.url;
            Debugger.Display.text += "\nDoes it exist? " + temp.exists;
            loader.load(new URLRequest(temp.url));

我还对涉及操作系统检测的逻辑语句进行了一些细化。

我希望有人觉得这很有用!

【讨论】:

以上是关于Adobe AIR 和不同的操作系统文件系统的主要内容,如果未能解决你的问题,请参考以下文章

linux adobe air 无法安装

Adobe Air 文件运行时权限拒绝不会调度事件

Adobe Air - 使用 Air 打开文件

ActionScript 3 Adobe AIR - 加载本地文本文件

Android的Adobe Air文件配置

如何在Adobe Air上运行现有的SWF文件