2013-11-25 36 views
1

我的最終目標是打開一個xml文件,更改數據並保存它。我用URLRequest打開它。我能夠改變的XML,但是,我的問題是:當我嘗試用流打開它來保存文件,那麼它說:as3 URLRequest和文件流保存xml數據 - 錯誤#3013:文件或目錄正在使用

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

據我的瞭解,你可以只從流中讀取的字節數,是這樣的:

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

然後你有一個XML對象,你可以像你在你的例子中那樣操縱。

+0

如何事件監聽器添加到它,然後:

答案可以在這個環節上發現了什麼?另外,當我放置一個trace(myXML)時,我似乎無法使用這種方法獲得變量。在你的代碼之後。 –

+0

這一個正在殺死我。我很親密。我只需要寫入XML,但文件流已經打開。 –

+1

這是一個同步呼叫,所以不需要聽衆。如果你想異步打開它,你應該檢查FileStream openAsync。 – Fygo