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 后正确处理它以防止资源泄漏。
我有一个 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 后正确处理它以防止资源泄漏。