首页 > 解决方案 > 如何使用 File.AppendAllText 并添加一个新行?

问题描述

public static void Save(string saveString)
    {
        File.AppendAllText(SAVE_FOLDER + "/" + "savegame.txt", saveString);
    }

该方法被调用两次甚至更多次,并且每次都使用另一个 saveString。保存文件的内容是这样的:

{"objects":[{"Key":"367f6ac2-6fd3-4c99-91e5-cc335a104ac4","Value":"{\"s1\":false}"}],"instanceID":0,"position":{"x":8.140000343322754,"y":0.0,"z":0.0},"scaling":{"x":1.0,"y":1.0,"z":1.0},"rotation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}}{"objects":[{"Key":"ecb45f8e-463c-4fe3-a436-5d836165bcce","Value":"{\"s1\":false}"}],"instanceID":0,"position":{"x":-11.229999542236329,"y":0.0,"z":8.920000076293946},"scaling":{"x":1.0,"y":1.0,"z":1.0},"rotation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}}

我想把它格式化成更好看的东西,也许在每个字符串之间添加一个空行?还是其他格式?

这就是我用 json 保存它的方式:

public void Save()
    {
        SaveObject saveObject = new SaveObject();
        for (int i = 0; i < objectsToSave.Count; i++)
        {
            var x = objectsToSave[i].GetComponents<Component>();
            var y = x.Where(component => component is IStateQuery).ToList();
            List<KeyToValue> myObjects = new List<KeyToValue>();
            foreach(var z in y)
            {
                var w = z as IStateQuery;
                myObjects.Add(new KeyToValue(w.UniqueId.ToString(), w.GetState()));
                
            }
            saveObject.position = objectsToSave[i].position;
            saveObject.scaling = objectsToSave[i].localScale;
            saveObject.rotation = objectsToSave[i].rotation;

            saveObject.objects = myObjects;


            string json = JsonUtility.ToJson(saveObject);

            SaveSystem.Save(json);
        }
    }

但我不喜欢文件中内容的格式。

我试图添加 Environment.NewLine :

File.AppendAllText(SAVE_FOLDER + "/" + "savegame.txt" + Environment.NewLine, saveString);

但这给了我错误:

ArgumentException:路径中有非法字符。

标签: c#unity3d

解决方案


我认为您的修复可能就像这样简单:

File.AppendAllText(SAVE_FOLDER + "/" + "savegame.txt" , Environment.NewLine + saveString);
// or even better at the end
File.AppendAllText(SAVE_FOLDER + "/" + "savegame.txt" ,  saveString + Environment.NewLine);

您正在将新行添加到文件名中,它确实无效。在您的内容之前或之后添加它,您会做得很好。

顺便说一句,文件的内容不是有效的 json。虽然每一行都是,但总文件不是因为以下语法无效

{}
{}

如果你希望它全部成为一个 JSON 对象,你将需要这样的东西

[
   {},
   {}
]

推荐阅读