|
|
|||||
Сохранение XML
Здравствуйте, в данном сценарии хотел записать в целом XML с помощью метода writeObject() класса файлСтрим
// импортируем нужные нам классы import flash.net.URLLoader; import flash.events.Event; import flash.net.URLRequest; import flash.desktop.NativeApplication; import flash.filesystem.FileStream; import flash.filesystem.FileMode; import flash.filesystem.File; // создаем новый объект URLLoader var loader:URLLoader = new URLLoader(); loader.dataFormat = URLLoaderDataFormat.TEXT; // событие на успешное завершения загрузки loader.addEventListener(Event.COMPLETE, HComplete); // загружаем сам файл "family"; loader.load(new URLRequest("family.xml")); function HComplete(e:Event):void { //Преобразуем загруженный текст а экземпляр XML var example:XML = new XML(e.target.data); // готов к изпользованию :) delete example.sister;//например хочу удалить элемент - sister // путь к файле var file:File = File.documentsDirectory.resolvePath("family.xml"); var stream:FileStream = new FileStream(); stream.open(file, FileMode.WRITE); // записываю объект XML; stream.writeObject(example); stream.close(); trace(example); <?xml version="1.0" encoding="UTF-8"?> <family> <father>jarry</father> <mother>carrol</mother> <sister>coral</sister> </family> В своем примере я хотел удалить элемент sister что и получилось но в самом файле ни каких изменений , может что-то я не правильно делаю. |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
__________________
Reality.getBounds(this); |
|
|||||
Сестренка так и не удалилась с семьи
Странно конечно , ведь XML с измененными параметрами должна была записаться , trace показывает два элемента xml как и должно быть trace(example.toXMLString()) тоже показывает два элемента (как и должно быть), не пойму в чем ошибка . |
|
|||||
Цитата:
Нет, так он грузится из директории приложения. А дальше у тебя идет Что, логично было бы заменить на File.applicationDirectory.resolvePath("family.xml"); Но фиг то там, applicationDirectory не даст тебе записывать файлы "read only" (хотя если создавать базу данных через SQLConnection, то прекрасно создается), только вчера с этим столкнулся. Так что выход тут один, использовать File.applicationStorageDirectory И грузить файл не так а так Если делаешь под мобилы, то на андроиде nativePath возвращает пустую строку, поэтому там это надо заменить на .url
__________________
Ко мне можно и нужно обращаться на ты) |
|
|||||
caseyryan, File.applicationStorageDirectory ? но так ведь я создаю десктопное приложение и заменив его на
файл успешно создался нежели записалась(с измененным содержимым ) и создалась она в рабочем столе. Почему интересно ? |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Потому что File.desktopDirectory это Рабочий стол, очевидно?
Класс File содержит статические свойства, которые позволяют указать часто используемые местоположения каталогов. К таким статическим свойствам относятся следующие: File.applicationStorageDirectory — каталог хранилища, который является уникальным для каждого установленного приложения AIR File.applicationDirectory — каталог только для чтения, в который устанавливается приложение (вместе с установленными активами) File.desktopDirectory — каталог рабочего стола пользователя File.documentsDirectory — каталог с документами пользователя File.userDirectory — каталог пользователя (http://help.adobe.com/ru_RU/FlashPla...stem/File.html)
__________________
Reality.getBounds(this); |
|
|||||
Сделал так но безрезультатно
как говорит helpAdobe Цитата:
// импортируем нужные нам классы import flash.net.URLLoader; import flash.events.Event; import flash.net.URLRequest; import flash.desktop.NativeApplication; import flash.filesystem.FileStream; import flash.filesystem.FileMode; import flash.filesystem.File; var loader:URLLoader = new URLLoader(); loader.dataFormat = URLLoaderDataFormat.TEXT; loader.addEventListener(Event.COMPLETE, HComplete); loader.load(new URLRequest("family.xml")); function HComplete(e:Event):void { var example:XML = new XML(e.target.data); delete example.sister;//например хочу удалить элемент - sister var bytes:ByteArray = new ByteArray(); bytes.writeUTFBytes(example.toXMLString()); var file:File = File.applicationStorageDirectory.resolvePath("family.xml"); var stream:FileStream = new FileStream(); stream.open(file, FileMode.WRITE); stream.writeBytes(bytes); stream.close(); trace(example); } |
|
|||||
А где ты проверяешь?
Путь к сохраненному файлу должен быть прмерно такой: C:\Users\ТУТ_ТВОЕ_ИМЯ_ПОЛЬЗОВАТЕЛЯ\AppData\Roaming\ТУТ_ПАКЕТ_ТВОЕГО_ПРИЛОЖЕНИЯ\Local Store Добавь после trace(example) такую строчку: И посмотри где у тебя этот файл сохраняется
__________________
Ко мне можно и нужно обращаться на ты) |
|
|||||
пишет: C:\Users\Zack\AppData\Roaming\noName\Local Store\family.xml
Добавлено через 11 минут Проверил этот файл и он действительно там создан с измененным содержимым :| Но почему тот файл.xml который находится в папке с проектом остался не тронутым ? |
Часовой пояс GMT +4, время: 04:50. |
|
« Предыдущая тема | Следующая тема » |
|
|