我的最终目标是打开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);
}
}
/////////
}
}
答案 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