所以,我正在创造一个“刽子手”游戏,用文字编辑器在游戏中加入自己的话语。我有一个打开文本文件的表单,并在多行文本框中显示内容。之后,用户可以编辑文本框。如果按“保存”,文本框中的内容将保存到文本文件中。
现在,一切都运作良好,阅读和写作。但现在如果我想发挥我的话,它总是比我输入的那个词更长。我通过调试发现我的程序以某种方式在每个单词后面加上“/ r”。例如,如果我在wordeditor中输入“Test”,则游戏会将其用作“Test / r”。 我相信这是一个错误的措辞,所以这里是代码:
namespace Hangman
{
public partial class WordEditor : Form
{
public WordEditor()
{
InitializeComponent();
using (StreamReader sr = new StreamReader(new FileStream("C:\\Users\\tstadler\\Desktop\\Hangman.txt", FileMode.Open)))
{
string[] Lines = sr.ReadToEnd().Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
for (int i = 0; i < Lines.Length; i++)
{
textBox1.Text += Lines[i] + Environment.NewLine;
}
}
}
private void saveToolStripMenuItem_Click(object sender, EventArgs e)
{
string[] words = textBox1.Text.Split('\n');
FileStream overwrite = new FileStream("C:\\Users\\tstadler\\Desktop\\Hangman.txt", FileMode.Create);
using (StreamWriter file = new StreamWriter(overwrite))
{
for (int i = 0; i < words.Length; i++)
{
file.Write(words[i] + Environment.NewLine);
}
}
MessageBox.Show("Words saved. ");
}
有谁能告诉我他是否认出错误? 感谢。
答案 0 :(得分:2)
在任何地方插入您使用的新行Environment.NewLine
- 除了一行:
string[] words = textBox1.Text.Split('\n');
这导致字符串被\n
拆分,而Environment.NewLine
在Windows系统上由\r\n
组成。因此,在拆分后,\r
保留在字符串的末尾。
要解决该问题,请使用
替换上述行string[] words = textBox1.Text.Split(new string[] { Environment.NewLine });
答案 1 :(得分:2)
打开文本文件,读取文件的所有行,然后关闭文件:
一行被定义为一系列字符,后跟回车符
\r
,换行符\n
或回车符后紧跟换行符。
创建一个新文件,将指定的字符串数组写入该文件,然后关闭该文件。
样品:
string[] lines = File.ReadAllLines("filePath");
File.WriteAllLines("filePath", textBox.Text.Split(new[] {Environment.NewLine}));
答案 2 :(得分:0)
你的解决方案是正确的,但是看起来很冗长:
和
所以你的阅读部分将是:
textBox1.Text = string.Join(Environment.NewLine,
File.ReadAllLines(filePath).Where(x=>!string.IsNullOrWhiteSpace(x)));
并写
File.WriteAllText(filePath,textBox1.Text);