在下一个函数写入文件之前,如何使一个函数打开文件,对其进行写入然后关闭该文件?

问题描述 投票:0回答:1

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

例如,我希望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);
        }
    }

json unity3d save file-writing
1个回答
0
投票

您到底是什么问题?对WriteInitialDataToFile方法有多个请求?您可以锁定。

...
        private static readonly object LockObject = new object();
...

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

        lock (LockObject){
        GetInitialRoomData();
        GetInitialTargetData();

        string json = JsonConvert.SerializeObject(saveDataList);
        Debug.Log(json);
        File.AppendAllText(path, json);
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.