Adobe AIR и различные файловые системы ОС - PullRequest
6 голосов
/ 05 февраля 2011

Еще один вопрос от Adobe Air, но сначала немного о проекте, с которым мне поручено работать. Это приложение AIR, которое считывает ресурсы с USB-ключа и должно работать как на WIN, так и на MacOS. Проблема в том, как загрузить ресурсы в приложение на MacOS! Звучит достаточно просто и без проблем работает в Windows.

Вот фрагмент кода того, что я пытаюсь сделать:

            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 ().

При запуске он печатает на окнах:

Попытка загрузки: G: \ 0a0ff0ff-f7ae-4b9c-9637-843b1d6c80e8.jpg
Существует ли это: правда

... и затем успешно загружает актив.

На MacOS выводится:

Попытка загрузки: /Volumes/AC/0a0ff0ff-f7ae-4b9c-9637-843b1d6c80e8.jpg
Существует ли это: правда

... а затем каждый раз выдает ошибку IOError.

Кто-нибудь может увидеть то, что мне здесь не хватает? У меня есть какая-то ошибка разрешения или что-то (файл имеет доступ «чтение / запись»). Ключ USB отформатирован в MS-DOS FAT32, это может быть проблемой?

EDIT

Я отформатировал новый USB-ключ в MacOS для FAT16 и безуспешно положил на него файлы. Проблемы остаются.

EDIT

Сейчас я просто пытаюсь загрузить ресурс из / users / -USERNAME- / Desktop и все еще получаю ту же ошибку, поэтому похоже, что проблема не связана с правами доступа только на USB-накопителе, он более распространен чем это.

EDIT

ПРОБЛЕМА РЕШЕНА! Наконец я правильно сформулировал свой поиск в Google, и он показал ответ .

Эти изменения исправят проблему:

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

Я также немного усовершенствовал логическое утверждение, связанное с обнаружением ОС.

Надеюсь, кто-нибудь найдет это полезным!

1 Ответ

1 голос
/ 25 апреля 2011

ПРОБЛЕМА РЕШЕНА! Наконец я правильно сформулировал свой поиск в Google, и он показал ответ .

Эти изменения исправят проблему:

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

Я также немного усовершенствовал логическое утверждение, связанное с обнаружением ОС.

Я надеюсь, что кто-то найдет это полезным!

...