如果文件存在,File.WriteAllText不会覆盖

时间:2018-06-30 03:58:26

标签: c#

我正在检查文件是否存在,如果不存在,则“创建并关闭”。否则,“覆盖”,但是覆盖永远不会发生,而只会追加。

    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使文件变大,并添加重复项。

已解决

正在复制自身的是数据,而不是文件。字典不允许重复,但是我要保存一个列表,然后通过添加保存文件中的项目来加载它。列表允许重复项,这些重复项反过来又像是我没有覆盖文件。

1 个答案:

答案 0 :(得分:1)

File.WriteAllText Method (String, String)

  

创建一个新文件,将指定的字符串写入该文件,然后   关闭文件。如果目标文件已经存在,它将被覆盖。

File.Delete Method (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 );