需要加载文件更改它,然后将更改写回其中。我收到了一个正在使用的文件错误。在我可以写文件之前,如何确保文件已关闭:
protected function getData():void
{
var urlLoader:URLLoader = new URLLoader();
urlLoader.addEventListener(Event.COMPLETE, onComplete);
urlLoader.dataFormat = URLLoaderDataFormat.BINARY;
urlLoader.load(new URLRequest(filePath));
}
protected function onComplete(e:Event):void
{
var data:XML = new XML((e.target as URLLoader).data);
data.replace('User',<User></User>);
var stream:FileStream = new FileStream();
stream.open(new File(filePath),FileMode.WRITE);
stream.writeMultiByte('<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\n<?xml-stylesheet type="text/xsl" href="template.xsl"?>\n'+data.toXMLString(),File.systemCharset);
stream.close();
}
我收到错误错误#2044:未处理的IOErrorEvent:。 text =错误#3013:正在使用文件或目录。 at views :: JobsManagement / readyToClean()[C:\ Users \ David \ Adobe Flash Builder 4.7 \ NxMobileInspect_FixingMemoryIssues \ src \ views \ JobsManagement.mxml:190] 在flash.events::EventDispatcher/dispatchEventFunction() at flash.events::EventDispatcher/dispatchEvent() 在flash.net::URLLoader/onComplete()
已经尝试使用openAsync方法打开不起作用。错误来自错误窗口,而不是来自调试器。 有什么想法吗?
答案 0 :(得分:0)
您可以尝试使用urlLoader.close(),但我个人使用try catch,然后使用Timer dealy,直到该文件可用于写入。您当然可以限制使用的try catch数量。类似的东西:
protected function onComplete(e:Event):void
{
var data:XML = new XML((e.target as URLLoader).data);
data.replace('User',<User></User>);
saveFile();
}
private function saveFile(e:Event = null):void
{
try
{
//FileStream write
}
catch(er:Error)
{
//set a timer with listener saveFile and try again
}
}