Search Unity

  1. Welcome to the Unity Forums! Please take the time to read our Code of Conduct to familiarize yourself with the forum rules and how to post constructively.
  2. We have updated the language to the Editor Terms based on feedback from our employees and community. Learn more.
    Dismiss Notice
  3. Join us on November 16th, 2023, between 1 pm and 9 pm CET for Ask the Experts Online on Discord and on Unity Discussions.
    Dismiss Notice

Can't save txt(xml) file on ios devices

Discussion in 'iOS and tvOS' started by David James, Jun 22, 2015.

  1. David James

    David James

    Joined:
    Jan 29, 2015
    Posts:
    61
    Code (CSharp):
    1. // iOS
    2.             path = Application.dataPath + "/Raw/plants.txt";
    3. XmlDocument doc = new XmlDocument();
    4.         doc.LoadXml(textAsset.text);
    5.    
    6.         XmlNode plant = doc.CreateElement("plant");
    7.         XmlNode xnhabitID = doc.CreateElement("habitID");
    8.         XmlNode xnplantID = doc.CreateElement("plantID");
    9.         XmlNode xnlevelplant = doc.CreateElement("levelplant");
    10.         XmlNode xnlevelroot = doc.CreateElement("levelroot");
    11.         XmlNode xnslot = doc.CreateElement("slot");
    12.         XmlNode xntime = doc.CreateElement("time");
    13.         XmlNode xnall = doc.CreateElement("clall");
    14.         XmlNode xnmid = doc.CreateElement("clmid");
    15.         XmlNode xnin = doc.CreateElement("clin");
    16.         XmlNode xnst = doc.CreateElement("status");
    17.         XmlAttribute xnid = doc.CreateAttribute("id");
    18.  
    19.         xnhabitID.InnerText = habitID.ToString();
    20.         xnplantID.InnerText = plantID.ToString();
    21.         xnlevelplant.InnerText = levelplant.ToString();
    22.         xnlevelroot.InnerText = levelroot.ToString();
    23.         xnslot.InnerText = slot.ToString();
    24.         xntime.InnerText = time;
    25.         xnall.InnerText = clall.ToString();
    26.         xnmid.InnerText = clmid.ToString();
    27.         xnin.InnerText = clin.ToString();
    28.         xnst.InnerText = status.ToString();
    29.         xnid.Value = getLastID(getNodeList())+"";
    30.  
    31.         plant.Attributes.SetNamedItem(xnid);
    32.         plant.AppendChild(xnhabitID);
    33.         plant.AppendChild(xnplantID);
    34.         plant.AppendChild(xnlevelplant);
    35.         plant.AppendChild(xnlevelroot);
    36.         plant.AppendChild(xnslot);
    37.         plant.AppendChild(xntime);
    38.         plant.AppendChild(xnall);
    39.         plant.AppendChild(xnmid);
    40.         plant.AppendChild(xnin);
    41.         plant.AppendChild(xnst);
    42.  
    43.  
    44.         doc.DocumentElement.AppendChild(plant);
    45.         doc.Save    (path);

    Error on Xcode :

    Code (CSharp):
    1. UnauthorizedAccessException: Access to the path "/var/mobile/Applications/D0C106E4-7B39-4F18-BFA1-37F79DA22DCB/1504271.app/Data/Raw/plants.txt" is denied.
    2.   at System.IO.FileStream..ctor (System.String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, Boolean anonymous, FileOptions options) [0x00000] in <filename unknown>:0
    3.   at System.IO.FileStream..ctor (System.String path, FileMode mode, FileAccess access, FileShare share) [0x00000] in <filename unknown>:0
    4.   at System.Xml.XmlTextWriter..ctor (System.String filename, System.Text.Encoding encoding) [0x00000] in <filename unknown>:0
    5.   at System.Xml.XmlDocument.Save (System.String filename) [0x00000] in <filename unknown>:0
    6.   at XMLConfig.addNewPlant (Int32 habitID, Int32 plantID, Int32 levelplant, Int32 levelroot, Int32 slot, System.String time, Int32 clall, Int32 clmid, Int32 clin, Int32 status) [0x00000] in <filename unknown>:0
    7.   at ActionUI.SaveData () [0x00000] in <filename unknown>:0
    8.   at UnityEngine.Events.InvokableCall.Invoke (System.Object[] args) [0x00000] in <filename unknown>:0
    9.   at UnityEngine.Events.InvokableCallList.Invoke (System.Object[] parameters) [0x00000] in <filename unknown>:0
    10.   at UnityEngine.Events.UnityEventBase.Invoke (System.Object[] parameters) [0x00000] in <filename unknown>:0
    11.   at UnityEngine.Events.UnityEvent.Invoke () [0x00000] in <filename unknown>:0
    12.   at UnityEngine.UI.Button.Press () [0x00000] in <filename unknown>:0
    13.   at UnityEngine.UI.Button.OnPointerClick (UnityEngine.EventSystems.PointerEventData eventData) [0x00000] in <filename unknown>:0
    14.   at UnityEngine.EventSystems.ExecuteEvents.Execute (IPointerClickHandler handler, UnityEngine.EventSystems.BaseEventData eventData) [0x00000] in <filename unknown>:0
    15.   at UnityEngine.EventSystems.ExecuteEvents.Execute (UnityEngine.GameObject target, UnityEngine.EventSystems.BaseEventData eventData, UnityEngine.EventSystems.EventFunction`1 functor) [0x00000] in <filename unknown>:0
    This method can working on unity editor but not working ios devices ,please help me !
     
  2. Who-am-I

    Who-am-I

    Joined:
    Mar 29, 2014
    Posts:
    73
  3. David James

    David James

    Joined:
    Jan 29, 2015
    Posts:
    61
  4. DanielQuick

    DanielQuick

    Joined:
    Dec 31, 2010
    Posts:
    3,137
    You should use Application.persistentDataPath
     
  5. David James

    David James

    Joined:
    Jan 29, 2015
    Posts:
    61
    I tried , but not working , my file saved to "/Documents" but I can't write and use method XMLDocument.Save();

    Code (CSharp):
    1.  
    2. UnauthorizedAccessException: Access to the path "/var/mobile/Applications/7F251F60-9CC5-4E18-8755-B05CB064DB82/Documents/plants.txt" is denied.
     
  6. Who-am-I

    Who-am-I

    Joined:
    Mar 29, 2014
    Posts:
    73
    Please try this, This code is working fine in iOS and Android both...
    Code (CSharp):
    1.         void Start()
    2.         {
    3.         string xmlFile = Application.persistentDataPath + "/fileName.txt"
    4.         FileStream fileStream = new FileStream(xmlFile, FileMode.Create);
    5.         StreamWriter streamWriter = new StreamWriter(fileStream);
    6.         streamWriter.Write("This is a text file");
    7.         streamWriter.Flush();
    8.         streamWriter.Close();
    9.         }
     
    luma2057 and David James like this.