gpt4 book ai didi

ios - 如何在同一位置读取和写入 xml 文件?

转载 作者:行者123 更新时间:2023-12-01 20:13:37 24 4
gpt4 key购买 nike

我已经准备了包含一些内容的 xml 文件,并希望在 iOS 设备上播放时加载它,但我也想更改加载的数据并再次将其序列化到同一个文件中。
在 Unity 编辑器(Windows)中它工作得很好,但是当我在 iOS 设备上测试它时,我似乎可以使用 WWW 类从 StreamingAssets 读取,但我不能写入它。
我还发现我可以读取和写入由 Application.persistentDataPath 创建的路径。但似乎该位置在设备中的某个位置,我无法将我的 xml 放入该位置,并且用户可以访问该文件夹,所以这不是一个好的解决方案,不是吗?

这里是我用来加载和保存数据的代码。

using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using System.Collections.Generic;
using System.Xml.Serialization;
using System.IO;
using System.Xml;

public class testxml : MonoBehaviour {

public Text result;
public InputField firstPart, secondPart;
public Toggle toggle;

private List<int> listToSave;

// Use this for initialization
void Start () {
listToSave = new List<int>();
}

public void Save()
{
Serialize();
}

public void Load()
{
StartCoroutine(Deserialize());
}

private void Serialize()
{
string path = GetPath();
try
{
Debug.Log("trying to save");

var serializer = new XmlSerializer(typeof(List<int>));
using (var fs = new FileStream(path, FileMode.OpenOrCreate))
{
serializer.Serialize(fs, listToSave);
}
}
catch (XmlException e)
{
result.text = "error";
Debug.LogError(path + " with " + (toggle.isOn ? "persistent data path" : "data path"));
Debug.LogError("xml exc while des file : " + e.Message);
}
catch (System.Exception e)
{
result.text = "error";
Debug.LogError("exc while des file : " + e.Message);
Debug.LogError(path + " with " + (toggle.isOn ? "persistent data path" : "data path"));
System.Exception exc = e.InnerException;
int i = 0;
while (exc != null)
{
Debug.Log("inner " + i + ": " + exc.Message);
i++;
exc = exc.InnerException;
}
}
}

private IEnumerator Deserialize()
{
Debug.Log("trying to load");
string path = GetPath();
var www = new WWW(path);
yield return www;
if (www.isDone && string.IsNullOrEmpty(www.error))
{
try
{
var serializer = new XmlSerializer(typeof(List<int>));
MemoryStream ms = new MemoryStream(www.bytes);
listToSave = serializer.Deserialize(ms) as List<int>;
ms.Close();
result.text += "Done\n";
foreach (var i in listToSave)
result.text += i + "\n";
}
catch (XmlException e)
{
result.text = "error";
Debug.LogError(path + " with " + (toggle.isOn?"persistent data path":"data path"));
Debug.LogError("xml exc while des file : " + e.Message);
}
catch (System.Exception e)
{
result.text = "error";
Debug.LogError("exc while des file : " + e.Message);
Debug.LogError(path + " with " + (toggle.isOn ? "persistent data path" : "data path"));
System.Exception exc = e.InnerException;
int i = 0;
while(exc!=null)
{
Debug.Log("inner "+i+": " + exc.Message);
i++;
exc = exc.InnerException;
}
}

yield break;
}
else
{
Debug.LogError("www exc while des file " + www.error);
Debug.LogError(path + " with " + (toggle.isOn ? "persistent data path" : "data path"));
yield break;
}
}

private string GetPath()
{
string path = firstPart.text;
if (toggle.isOn)
{
path += Application.persistentDataPath;
}
else
path += Application.dataPath;
path += secondPart.text;
return path;
}
}

最佳答案

"I want to put my xml file in this folder, and then read it. It's like default info for game"



很简单,只要把它放在你的 Assets 中。像这样走……
 public TextAsset myXMLFile;

在 Inspector 中将文件拖到那里。你完成了。

"but then I also want to change that file and save"



很公平。你要做的是

(1) 制作路径 p = Application.persistentDataPath + "values.txt"

(2) 程序启动。

(3) 检查“p”是否存在。如果是,请阅读并转到(6)

(4) 如果不是,请阅读 textasset 并将其保存到“p”

(5) 转到第 (3) 点

(6) 你完成了。

这是唯一的方法。这确实是 Unity 中的正常程序,您可以在每个 Unity 应用程序中执行此操作。没有别的办法!

关于ios - 如何在同一位置读取和写入 xml 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37216851/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com