C# 文本在运行之间被覆盖

C# Text gets overwritten between runs

我有一个 streamwriter 可以将一些单词写入文本文件。它在每一行上打印一个单词,但是如果我停止应用程序并重新启动它,旧的单词就会消失,只有新的单词在那里。怎么做才不会被覆盖?

using UnityEngine;
using System.Collections;
using System.IO;
using UnityEngine.UI;

public class ListScript : MonoBehaviour {

    public InputField word;
    StreamWriter s;

    void Start() {
        s = new StreamWriter(Application.persistentDataPath + "/test.txt");
    }

    public void NewList() {
       if(word != null) { 
           print(Application.persistentDataPath);
           s.WriteLine(s.NewLine + word.text);
           s.Flush();
       }
    }

    void OnLevelWasLoaded(int level) {
        s.Close();
        Debug.Log("I was here");
    }
}

听起来您想将文本附加到文件末尾而不是重新开始。这里有更多关于 File.AppendText.

的信息

您正在使用 StreamWriter 每次都会覆盖文件。

如前所述in the documentation:

The path parameter can be a file name, including a file on a Universal Naming Convention (UNC) share. If the file exists, it is overwritten; otherwise, a new file is created.

您可以简单地使用 File.AppendAllText(...) 来达到您的目的。在这种情况下,您甚至不需要使用 StreamWriter.

您可以将代码更改为

if (word != null) { 
    print(Application.persistentDataPath);
    File.AppendAllText(Application.persistentDataPath + "/test.txt", s.NewLine + word.text);
}

因此您的完整代码如下所示:

using UnityEngine;
using System.Collections;
using System.IO;
using UnityEngine.UI;

public class ListScript : MonoBehaviour {

    public InputField word;

    void Start() {
    }

    public void NewList() {
       if (word != null) { 
           print(Application.persistentDataPath);
           File.AppendAllText(Application.persistentDataPath + "/test.txt", s.NewLine + word.text);
       }
    }

    void OnLevelWasLoaded(int level) {
        Debug.Log("I was here");
    }
}

您使用了 StreamWriter(string path) 构造函数来访问您的文件。

If you look up in MSDN你会看到如果“路径”是一个文件,并且该文件存在,它将被覆盖。

解决此问题的一种方法是在 File.Append 模式下打开 FileStream。在这种情况下,您根本不需要使用 StreamWriter。您需要确保在使用完 FileStream 后正确处理它以防止资源泄漏。