如何确保URLLoader打开的文件已关闭,以便我可以使用FileStrewam在其上书写

时间:2014-07-31 13:50:07

标签: actionscript-3 flex flex4

需要加载文件更改它,然后将更改写回其中。我收到了一个正在使用的文件错误。在我可以写文件之前,如何确保文件已关闭:

        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 \ Adob​​e 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方法打开不起作用。错误来自错误窗口,而不是来自调试器。 有什么想法吗?

1 个答案:

答案 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
    }
}