我正在检查一个文件是否存在,如果它不存在,“创建并关闭”。否则,“覆盖”,但覆盖永远不会发生,只附加。
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使文件更大,并附加副本。
解决了
是数据复制了自己,而不是文件。字典不允许重复,但我保存了一个列表,然后通过从保存文件中添加项来加载它。列表允许重复,而这些副本又看上去像是我没有覆盖文件。
发布于 2018-06-30 04:17:00
创建一个新文件,将指定的字符串写入文件,然后关闭该文件。如果目标文件已经存在,则将覆盖该文件。
删除指定的文件。
这是黑白相间。如果发生其他情况,则需要调试应用程序,因为要么抛出异常,要么路径不是您认为的那样,要么数据不是您所认为的那样。CLR和windows API不会掷骰子。
祝好运
更新
谢谢。我已经删除了第二个文件函数,并保留了delete,我已经验证了它的工作。我尝试过在tried参数中更改文件名,这是可行的。只剩下里面的数据。--我用if else语句保存字典以防止重复,但是文件中充满了重复项,因此在加载时会抛出一个异常,重复项存在。
字典可以防止键(而不是值)上的重复,值可以整天重复。
foreach (var key in dict.Keys)
list.Add(key );或者如果您需要不同的值(取决于数据类型)
foreach (var val in dict.Values.Distinct())
list.Add(val );https://stackoverflow.com/questions/51111596
复制相似问题