as3 URLRequest和保存xml数据的文件流 - 错误#3013:正在使用文件或目录

时间:2013-11-25 19:03:16

标签: xml actionscript-3 filestream

我的最终目标是打开xml文件,更改数据并保存。我用URLRequest打开它。我可以更改xml,但是,我的问题是:当我尝试使用流打开它来保存文件时,它会说:

Error: Error #3013: File or directory is in use.

我想我可以使用相同的流打开它,但是当我使用URLRequest时,我不知道如何在我的脚本中获取xml变量。

所以我要么需要a)关闭xml文件,这样我就可以用流打开它,或者b)打开带有流的xml,以及如何获取我需要的变量并操纵它们进行保存。可能有c)但我现在想不到它。

这是我的代码:

package com
{
    import flash.filesystem.*;
    import flash.system.System;

    import flash.display.Stage;
    import flash.events.*;
    import flash.net.*;
    import flash.display.*;


    public class userSettings
    {

        public var pathToFile:String = File.desktopDirectory.resolvePath('userSettings.xml').nativePath;
        public var someFile:File = new File(pathToFile);
        public var stream:FileStream = new FileStream();



        public var myLoader = new URLLoader();

        public function userSettings()
        {
            loadSettings();
        }

        public function saveSettings(daFile:String)
        {
            stream.open(someFile, FileMode.WRITE);
            stream.writeUTFBytes(daFile);
            trace("Settings SAVED! " +daFile);
            //stream.close();
        }




public function loadSettings()
        {




            trace(pathToFile);


            myLoader.load(new URLRequest(pathToFile));


            myLoader.addEventListener(Event.COMPLETE, processXML);

            function processXML(e:Event):void
            {
                var myXML = new XML(e.target.data);

                // Gets vars from xml. I need this option. 
                var homeT = myXML.Settings.(@Title=="homeT");
                trace("And it works? " + homeT);

                            // Changes vars in xml                   
                            myXML.Settings.(@Title == "homeT").* = "Home2";

                // trace works with changed xml
                             trace(myXML);
                            /// Now trying to save it doesn't work. 
                saveSettings(myXML);
            }

        }


/////////
    }

}

2 个答案:

答案 0 :(得分:2)

据我所知,您只需从流中读取字节,例如:

var fileStream:FileStream = new FileStream();
fileStream.open(file, FileMode.READ); 
var myXML:XML = XML(fileStream.readUTFBytes(fileStream.bytesAvailable)); 

然后你有一个XML对象,你可以像在你的例子中那样操作。

答案 1 :(得分:0)

在使用FileStream类打开,写入,关闭之前需要稍微延迟。再次,仅限Windows!我用一个计时器来调用写入该位置的函数。

答案可以在以下链接中找到:Adobe Air FileStream Error #3013: File or directory is in use