Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flash Приложения: AIR, Zinc и тд. (http://www.flasher.ru/forum/forumdisplay.php?f=94)
-   -   Открытие файла по относительной ссылке (http://www.flasher.ru/forum/showthread.php?t=103439)

NePridymal 05.11.2007 17:23

Открытие файла по относительной ссылке
 
Доброго времени суток.

Это не вопрос а совет, основанный на личном опыте. Может кому пригодится (даже точно пригодится).

Итак, возникла у меня необходимость записи в файл, находящийся в подпапке папки, в которую установленно приложение.
По документации это выглядело примерно так:

Код:

  var file:File = new File();
  file.url = "app-resource:/Data/Handler.xml";
 
  trace(file.size) // работает, показывает истинный размер, тоесть файл найден
 
  var fileStream:FileStream = new FileStream();
  fileStream.open(file, FileMode.WRITE);
  fileStream.writeUTFBytes(xml);
  fileStream.close();

(кто не знает - "app-resource:/" - AIR-овский встроенный указатель на папку приложения). Интересно, что первая часть кода работала правильно, но при попытке открытия файла - возникала ошибка "файл не найден". Скорее всего это баг, который к счастью легко решается:

Код:


  var tmpFile:File  = new File();
  tmpFile.url = "app-resource:/";

  var file:File = new File();
  file.nativePath = String(tmpFile.nativePath) + "\\Data\\Handler.xml";

  var fileStream:FileStream = new FileStream();
  fileStream.open(file, FileMode.WRITE);
  fileStream.writeUTFBytes(xml);
  fileStream.close();

Конечно, можно получить тот же еффект при использовании File.applicationResourceDirectory, но этот совет касается именно работы "app-resource:/" .

screamge 05.11.2007 18:00

Дело в том что fileStream не любит путь в виде url (пробелы заменяются на «%20»). Второй пример работает потому что хоть урл и выставляется но потом используется nativePath. Вообще я бы посоветовал использовать resolvePath.

В идеале это должно выглядеть так:
Код:

  var file:File = new File();
  file.resolvePath (File.applicationResourceDirectory.nativePath + '/Handler.xml');

  var fileStream:FileStream = new FileStream();
  fileStream.open(file, FileMode.WRITE);
  fileStream.writeUTFBytes(xml);
  fileStream.close();


NePridymal 05.11.2007 18:31

Я так и понял что fileStream не любит путь в виде url. Просто тогда, когда я писал этот код, о такой штуке как File.applicationResourceDirectory не знал (ну кривая у них документация к AIR-у на сайте адоба. Мне тот .pdf-ник ужасно не нравится, очень плохо написан на мой взгляд). И поэтому стал использовать app-resource:/ , а это можно прописать только к свойству url. Поэтому и сделал так. А тут отписал про особенность использования именно app-resource:/ (так как в документации об этом ничего нет (ну или я не нашел)). Про resolvePath - спасибо, буду пользоваться.


Часовой пояс GMT +4, время: 21:13.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.