这是我的代码,用于创建.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:我应该提到的是,当文件存在时,它会正确地将文本附加到文件中,问题是在创建文件并首次写入文件时
答案 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 开始扫描文件,此时写入文件出现问题。