簡體   English   中英

如果文件存在,File.WriteAllText不會覆蓋

[英]File.WriteAllText does not overwrite if file exists

我正在檢查文件是否存在,如果不存在,則“創建並關閉”。 否則,“覆蓋”,但是覆蓋永遠不會發生,而只會追加。

    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使文件更大,並添加重復項。

解決了

復制的是數據本身,而不是文件。 字典不允許重復,但是我要保存一個列表,然后通過添加保存文件中的項目來加載它。 列表允許重復項,這些重復項又看起來像我沒有覆蓋文件。

File.WriteAllText方法(字符串,字符串)

創建一個新文件,將指定的字符串寫入該文件,然后關閉該文件。 如果目標文件已經存在,則將其覆蓋。

File.Delete方法(字符串)

刪除指定的文件。

這是黑白的。 如果發生任何其他情況,則需要調試應用程序,因為拋出了異常,路徑不是您認為的樣子或數據不是您認為的樣子。 CLR和Windows API不會擲骰子

祝好運

更新

謝謝。 我已經刪除了第二個文件功能,並保留了刪除功能,我已經驗證了該功能。 我試過在else參數中更改文件名,並且該方法有效。 僅保留其中的數據。 我用if else語句保存了一個字典,以防止重復,但是文件中充滿了重復,因此在加載時會拋出一個異常,即重復存在

字典可以防止鍵上的重復項而不是值,可以整天重復值

foreach (var key in dict.Keys)
   list.Add(key );

或者如果您想要不同的值(取決於數據類型)

foreach (var val in dict.Values.Distinct())
   list.Add(val );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM