我正在检查文件是否存在,如果不存在,则“创建并关闭”。否则,“覆盖”,但是覆盖永远不会发生,而只会追加。
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使文件变大,并添加重复项。
已解决
正在复制自身的是数据,而不是文件。字典不允许重复,但是我要保存一个列表,然后通过添加保存文件中的项目来加载它。列表允许重复项,这些重复项反过来又像是我没有覆盖文件。
答案 0 :(得分:1)
File.WriteAllText Method (String, String)
创建一个新文件,将指定的字符串写入该文件,然后 关闭文件。如果目标文件已经存在,它将被覆盖。
删除指定的文件。
这是黑白的。如果发生任何其他情况,则需要调试应用程序,因为抛出了异常,路径不是您认为的样子或数据不是您认为的样子。 CLR和Windows API不会掷骰子
祝你好运
更新
谢谢。我删除了第二个文件功能,并删除了, 我验证过的作品。我尝试过更改文件名 其他论点,那行得通。仅保留其中的数据。 我保存了 带有if else语句的字典,以防止重复,但是文件 充满重复项,因此在加载时会引发异常 存在重复项。
字典可防止键值重复,值可以整天重复
foreach (var key in dict.Keys)
list.Add(key );
或者如果您想要不同的值(取决于数据类型)
foreach (var val in dict.Values.Distinct())
list.Add(val );