IOException:在路径上共享冲突

时间:2019-07-06 15:44:35

标签: c# unity3d io

这是我的代码,用于创建.dat文件或在其中添加文本:

public static void saveGameAnalyseData(GameAnalyseData gameAnalyseData)
{
    Debug.Log(JsonUtility.ToJson(gameAnalyseData) + " " + Application.persistentDataPath + "/" + gameAnalyseData.gameID + ".dat");

    if (File.Exists(Application.persistentDataPath + "/" + gameAnalyseData.gameID + ".dat"))
    {
        File.AppendAllText(Application.persistentDataPath + "/" + gameAnalyseData.gameID + ".dat", JsonUtility.ToJson(gameAnalyseData) + Environment.NewLine);
    }
    else
    {
       File.Create(Application.persistentDataPath + "/" + gameAnalyseData.gameID + ".dat");
        if (File.Exists(Application.persistentDataPath + "/" + gameAnalyseData.gameID + ".dat"))
        {
            File.AppendAllText(Application.persistentDataPath + "/" + gameAnalyseData.gameID + ".dat", JsonUtility.ToJson(gameAnalyseData) + Environment.NewLine);
        }
    }
}

但是我得到

  

IOException:在路径上共享冲突   在第二次File.AppendAllText通话中...

我也尝试过以下代码:

    if (File.Exists(Application.persistentDataPath + "/" + gameAnalyseData.gameID + ".dat"))
    {
        File.AppendAllText(Application.persistentDataPath + "/" + gameAnalyseData.gameID + ".dat", JsonUtility.ToJson(gameAnalyseData) + Environment.NewLine);
    }
    else
    {
       File.Create(Application.persistentDataPath + "/" + gameAnalyseData.gameID + ".dat");
        StreamWriter sw = new StreamWriter(Application.persistentDataPath + "/" + gameAnalyseData.gameID + ".dat");
        sw.WriteLine(JsonUtility.ToJson(gameAnalyseData) + Environment.NewLine);
        // close the stream
        sw.Close();
    }

但是在这条线上我得到了同样的错误:

StreamWriter sw = new StreamWriter(Application.persistentDataPath + "/" + gameAnalyseData.gameID + ".dat");

PS:我应该提到的是,当文件存在时,它会正确地将文本附加到文件中,问题是在创建文件并首次写入文件时

2 个答案:

答案 0 :(得分:1)

您可以仅使用以下代码行替换所有代码:

File.AppendAllText(Application.persistentDataPath + "/" + gameAnalyseData.gameID + ".dat", JsonUtility.ToJson(gameAnalyseData) + Environment.NewLine);

因为AppendAllText方法将打开一个文件,将指定的字符串附加到该文件,然后关闭该文件,如果该文件不存在,则此方法将创建一个文件,并将指定的字符串写入该文件然后关闭文件。

无论如何,如果您想在所有使用File.Create(filePath);的地方都使用自己的代码,请用File.Create(filename).Close();替换此代码。因为File.Create(filePath)在指定路径中创建或覆盖文件,然后将打开的FileStream对象返回到该文件。如果需要,可以使用此FileStream对象来处理文件(如果不需要),因此应将其关闭。

答案 1 :(得分:1)

就我而言,问题出在 Anti-Virus,当大量写入文件时,Anti-Virus 开始扫描文件,此时写入文件出现问题。