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

时间:2016-02-11 18:22:21

标签: c# unity3d streamwriter

我有一个将一些单词写入文本文件的编写器。它在每一行打印一个单词,但是如果我停止应用程序并再次启动它旧单词就会消失,只有新单词存在。如何使词语不被覆盖?

json_last_error_msg()

3 个答案:

答案 0 :(得分:3)

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

如上所述in the documentation

  

path参数可以是文件名,包括通用命名约定(UNC)共享上的文件。如果文件存在,则会被覆盖;否则,将创建一个新文件。

您只需使用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");
    }
}

答案 1 :(得分:2)

听起来您想要将文本附加到文件的末尾而不是重新开始。以下是有关File.AppendText的更多信息。

答案 2 :(得分:-1)

您使用StreamWriter(字符串路径)构造函数来访问您的文件。

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

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