Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Сохранение XML (http://www.flasher.ru/forum/showthread.php?t=212567)

zackscript 14.03.2016 20:42

Сохранение XML
 
Здравствуйте, в данном сценарии хотел записать в целом XML с помощью метода writeObject() класса файлСтрим
Код AS3:

// импортируем нужные нам классы
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);

но открыв сам файл family.xml, как и было:
Код:

<?xml version="1.0" encoding="UTF-8"?>
<family>
<father>jarry</father>
<mother>carrol</mother>
<sister>coral</sister>
</family>

так и осталось
В своем примере я хотел удалить элемент sister что и получилось
http://cs629131.vk.me/v629131723/40d58/y6I9DidVjKc.jpg
но в самом файле ни каких изменений , может что-то я не правильно делаю.

Wolsh 14.03.2016 22:46

Код AS3:

                        stream.open(file, FileMode.WRITE);
                        var bytes:ByteArray = new ByteArray();
                        bytes.writeUTFBytes(example.toXMLString());
                        stream.writeBytes(bytes);
                        stream.close();


zackscript 15.03.2016 19:47

Сестренка так и не удалилась с семьи :)
Странно конечно , ведь XML с измененными параметрами должна была записаться , trace показывает два элемента xml как и должно быть
trace(example.toXMLString()) тоже показывает два элемента (как и должно быть), не пойму в чем ошибка .

dimarik 15.03.2016 20:00

Не тот файл открываете )
Откройте в примере тот же файл и выведите трейс.

caseyryan 15.03.2016 20:36

Цитата:

// загружаем сам файл "family";
loader.load(new URLRequest("family.xml"));
Откуда загружаем? Ты думаешь что таким образом ты его загрузишь из папки Documents?
Нет, так он грузится из директории приложения.
А дальше у тебя идет
Код AS3:

var file:File = File.documentsDirectory.resolvePath("family.xml");

Что, логично было бы заменить на File.applicationDirectory.resolvePath("family.xml");
Но фиг то там, applicationDirectory не даст тебе записывать файлы "read only" (хотя если создавать базу данных через SQLConnection, то прекрасно создается), только вчера с этим столкнулся. Так что выход тут один, использовать File.applicationStorageDirectory

И грузить файл не так
Код AS3:

loader.load(new URLRequest("family.xml"));

а так
Код AS3:

loader.load(new URLRequest(File.applicationStorageDirectory.resolvePath("family.xml").nativePath)); // при условии, что он там есть, иначе будет IOError

Если делаешь под мобилы, то на андроиде nativePath возвращает пустую строку, поэтому там это надо заменить на .url

zackscript 15.03.2016 21:39

caseyryan, File.applicationStorageDirectory ? но так ведь я создаю десктопное приложение и заменив его на
Код AS3:

var file:File = File.desktopDirectory.resolvePath("family.xml");

файл успешно создался нежели записалась(с измененным содержимым ) :) и создалась она в рабочем столе.
Почему интересно ?

Wolsh 15.03.2016 22:27

Потому что File.desktopDirectory это Рабочий стол, очевидно?

Класс File содержит статические свойства, которые позволяют указать часто используемые местоположения каталогов. К таким статическим свойствам относятся следующие:

File.applicationStorageDirectory — каталог хранилища, который является уникальным для каждого установленного приложения AIR
File.applicationDirectory — каталог только для чтения, в который устанавливается приложение (вместе с установленными активами)
File.desktopDirectory — каталог рабочего стола пользователя
File.documentsDirectory — каталог с документами пользователя
File.userDirectory — каталог пользователя

(http://help.adobe.com/ru_RU/FlashPla...stem/File.html)

zackscript 17.03.2016 14:15

Сделал так но безрезультатно :(
как говорит helpAdobe
Цитата:

File.applicationStorageDirectory — каталог хранилища, который является уникальным для каждого установленного приложения AIR
почему не записывает я не пойму
Код AS3:

// импортируем нужные нам классы
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);
}


caseyryan 17.03.2016 14:24

А где ты проверяешь?
Путь к сохраненному файлу должен быть прмерно такой:
C:\Users\ТУТ_ТВОЕ_ИМЯ_ПОЛЬЗОВАТЕЛЯ\AppData\Roaming\ТУТ_ПАКЕТ_ТВОЕГО_ПРИЛОЖЕНИЯ\Local Store

Добавь после trace(example) такую строчку:
Код AS3:

trace(file.nativePath);

И посмотри где у тебя этот файл сохраняется

zackscript 17.03.2016 15:03

пишет: C:\Users\Zack\AppData\Roaming\noName\Local Store\family.xml

Добавлено через 11 минут
Проверил этот файл и он действительно там создан с измененным содержимым :|
Но почему тот файл.xml который находится в папке с проектом остался не тронутым ?


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

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