Сохранить в XML-файл без диалогового окна с приглашением пользователя в сценарии действий 3? - PullRequest
3 голосов
/ 12 марта 2011

Как сохранить данные в файл XML без диалогового окна с приглашением пользователя в Action Script 3?

Я пишу простое приложение (с Adobe Flash), которое работает на клиентском ПК и сохраняет данные о состоянии пользователя в файле XML в том же каталоге приложения.Когда я использую FileReference, он показывает диалог пользователя для сохранения файла.Есть ли какой-либо класс для сохранения только данных XML непосредственно в файл XML?

Я думаю, что написание только данных XML (текстовая плоскость) не могло создать проблем с безопасностью?: -

Ответы [ 3 ]

3 голосов
/ 18 января 2012

Я поражен, что никто не опубликовал это уже. Загрузите XML-файл в память с помощью URLLoader, убедившись, что dataFormat имеет значение URLLoaderDataFormat.TEXT, а затем запишите его в файл, используя файловый поток.

Рабочий код размещен ниже

Надеюсь, это поможет

private function loadConfigFromServer():void{
    var request:URLRequest = new URLRequest(serverConfigXmlLocation);
    configLoader = new URLLoader();

    configLoader.addEventListener(Event.COMPLETE, configLoadCompleteHandler);
            configLoader.addEventListener(IOErrorEvent.IO_ERROR, configLoadIOErrorEventHandler);
    configLoader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, configLoadSecurityErrorEventHandler);

    configLoader.dataFormat = URLLoaderDataFormat.TEXT;
    configLoader.load(request);

}


 private function configLoadCompleteHandler(event:Event):void{
     configLoader.removeEventListener(Event.COMPLETE, configLoadCompleteHandler);
     configLoader.removeEventListener(IOErrorEvent.IO_ERROR, configLoadIOErrorEventHandler);
     configLoader.removeEventListener(SecurityErrorEvent.SECURITY_ERROR,   configLoadSecurityErrorEventHandler);
     trace("config download complete");
     var fs:FileStream = new FileStream();
     try{
         fs.open(new File(localConfigXmlLocation), FileMode.WRITE);
         fs.writeMultiByte(configLoader.data, "unicode");
     }catch(error:IOError){
         trace("IOError saving config xml");
     }catch(error:SecurityError){
         trace("SecurityError saving config xml");
     }finally{
         fs.close();
         parseLocalConfig();
     }
}
2 голосов
/ 12 марта 2011

Единственный реальный способ сохранить данные без появления диалога - это использовать класс SharedObject.При условии, что вам не нужно редактировать XML извне, все должно быть хорошо, вы можете сохранить его.

SharedObject откроет диалоговое окно, однако, если вы превысите 100 КБ (я думаю) данных, так что если вашXML становится больше этого, сжимайте его с помощью ByteArray.

Сжатие:

var ba:ByteArray = new ByteArray;
ba.writeUTFBytes( myXML );
ba.compress();

Распаковка:

try
{
    ba.uncompress();
}
catch ( e:Error )
{
    trace( "The ByteArray wasn't compressed!" );
}

// set our xml data
myXML = XML( ba );
1 голос
/ 13 марта 2011

Возможно дублирование: Возможно сохранение XML-файла в AS3

С помощью общего объекта, такого как описанные divillysausages, вы можете сохранить массив, или данные XML, или другие переменные в общем объектечтобы получить это позже.Вы только сохраняете эти данные на компьютер пользователя, поэтому они не могут быть использованы нигде, кроме как на локальном компьютере.Короткий ответ: без серверного языка для связи вы не сможете сохранить данные в реальном XML-файле, если это приложение в виде браузера или проектор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...