【发布时间】:2018-06-30 12:54:27
【问题描述】:
我正在检查文件是否存在,如果不存在,“创建并关闭”。否则,“覆盖”,但覆盖永远不会发生,只会追加。
if (!File.Exists(filePath))
File.WriteAllText(filePath, data);
else
File.WriteAllText(filePath, data);
来自 MSDN:创建一个新文件,将指定的字符串写入文件,然后关闭文件。如果目标文件已经存在,则覆盖。
它旨在覆盖,但它没有。我做错了什么?
我的完整代码:
static void Save<T, Y>(Dictionary<T,Y> dict, List<Y> list, string path)
{
foreach (var val in dict.Values)
list.Add(val);
string data = JsonHelper.ToJson(list.ToArray(), true);
Debug.Log("saving version: " + data);
string filePath = Application.dataPath + path;
if (!File.Exists(filePath))
File.WriteAllText(filePath, data);
else
File.WriteAllText(filePath, data);
}
编辑:
我已添加:
if (!File.Exists(filePath))
File.WriteAllText(filePath, data);
else
{
Debug.Log("never called?");
File.Delete(filePath);
File.WriteAllText(filePath, data);
}
debug.log 被调用,删除似乎被跳过(?)然后 WriteAllText 使文件变大,追加重复。
已解决
复制自身的是数据,而不是文件。字典不允许重复,但我保存了一个列表,然后通过添加保存文件中的项目来加载它。列表允许重复,这反过来看起来好像我没有覆盖文件。
【问题讨论】:
-
path的价值是什么? (显示一些例子)......和Application.dataPath,也许我错了,但我找不到类似的东西......Application.StartupPath等等 - 是的,但是dataPath(??) -
对不起,我应该提一下“Application.dataPath”是一个 Unity 方法。
-
显然
data包含了新旧内容,所以你用错误的数据覆盖了文件。 -
是的,没错。只是想弄清楚它是如何同时获得新旧的。
标签: c#