【问题标题】:How can I make one function open a file, write to it then close the file, before the next function writes to it?在下一个函数写入文件之前,如何让一个函数打开文件,写入文件然后关闭文件?
【发布时间】:2020-04-23 21:38:22
【问题描述】:

我正在尝试将数据写入文件。我想做的是让每个函数打开一个文件(如果存在),写入它然后在下一个函数之前关闭它。下面是我到目前为止得到的代码,它确实写入了一个文件,但不是我想要的。

例如,我希望 GetInitialRoomData() 首先打开、写入和关闭文件。然后下一个函数Ge​​tInitialTargetData() 打开、写入和关闭文件。任何想法/代码将不胜感激?谢谢!

void WriteInitialDataToFile()
    {
        string path = Application.persistentDataPath + fileName;
        if (!File.Exists(path))
        {           
            File.WriteAllText(path, "");            
        }

        GetInitialRoomData();
        GetInitialTargetData();

        string json = JsonConvert.SerializeObject(saveDataList);
        Debug.Log(json);
        File.AppendAllText(path, json);
    }

    void GetInitialRoomData()
    {
        foreach (GameObject roomObject in GameObject.FindGameObjectsWithTag("Cell"))
        {
            saveRoomObject = new SaveRoomData(roomObject.name, roomObject.transform.position);
            saveDataList.Add(saveRoomObject);
        }
    }

    void GetInitialTargetData() 
    {
        foreach (GameObject targetObject in GameObject.FindGameObjectsWithTag("Target")) 
        {
            saveTargetObject = new SaveRoomData(targetObject.name, targetObject.transform.position, targetObject.transform.eulerAngles);
            saveDataList.Add(saveTargetObject);
        }
    }

【问题讨论】:

  • 您能详细解释一下您到底想要什么吗?我看不到GetInitialRoomDataGetInitialTargetData 会在哪里读/写任何文件...唯一的方法是WriteInitialDataToFile ....您希望它们分开并且每种方法都有自己的写作吗?
  • 是的。我希望每个方法都写入自己的数据,然后下一个方法写入数据。我需要将每个数据单独放在 json 文件中。例如。一段 roo​​mCoordinates,然后是下一段 targetObject 坐标,以此类推

标签: json unity3d save file-writing


【解决方案1】:

我认为您的问题不在于如何打开和写入文件,您已经使用File.AppendAllText 函数完成了它。
使用SerializeObject 函数时,不能直接序列化List。最后,在您的情况下,JsonConvert.SerializeObject(saveDataList); 将返回空字符串,因此您的文件也将为空。
改用类或数组 (Read More)

【讨论】:

  • 当前,JsonConvert.SerializeObject(saveDataList) 正在写入我的文件。它不会写入空字符串。我正在使用 2 个可序列化的类。第一个是全局 List 对象,即 saveDataList。第二个可序列化类有多个构造函数,初始化需要存储的数据。目前,它正在打印以连续排序来归档每个对象,例如roomCoordinates、targetData、staticObjects 等等。相反,我希望它首先写入所有房间坐标,然后是 targetData 位置,然后是 staticObjects 等等。不要将它们捆绑在一个字符串中。
猜你喜欢
  • 1970-01-01
  • 2020-06-02
  • 1970-01-01
  • 2013-07-12
  • 2017-03-21
  • 1970-01-01
  • 2022-01-01
  • 2019-03-20
  • 2022-01-08
相关资源
最近更新 更多