Adobe AIR 和不同的操作系统文件系统
Posted
技术标签:
【中文标题】Adobe AIR 和不同的操作系统文件系统【英文标题】:Adobe AIR and different OS filesystems 【发布时间】:2011-06-21 17:30:50 【问题描述】:向您提出另一个 Adobe 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 和不同的操作系统文件系统的主要内容,如果未能解决你的问题,请参考以下文章