0

所以,我正在创造一个“刽子手”游戏,用文字编辑器将你自己的文字放入游戏中。我有一个表单,它打开一个文本文件并在多行文本框中显示内容。之后,用户可以编辑文本框。如果您按“保存”,则文本框中的内容将保存到文本文件中。

现在,一切正常,阅读和写作。但是现在如果我想玩我的单词,它总是比我输入的单词长。我通过调试发现我的程序以某种方式在每个单词后面添加了“/r”。例如,如果我在 wordeditor 中输入“Test”,游戏会将其用作“Test/r”。我认为这是 wordeditor 中的错误,所以这里是代码:

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. ");
}

谁能告诉我他是否认识到错误?谢谢。

4

3 回答 3

2

在任何地方插入你使用的新行Environment.NewLine- 除了一行:

string[] words = textBox1.Text.Split('\n');

这导致在Windows 系统上由\nwhile分割的字符串Environment.NewLine组成。\r\n因此,在拆分后,\r剩余部分位于字符串的末尾。

要解决该问题,只需将上面提到的行替换为

string[] words = textBox1.Text.Split(new string[] { Environment.NewLine });
于 2013-01-09T09:52:07.557 回答
2

使用File.ReadAllLines

打开一个文本文件,读取文件的所有行,然后关闭文件:

行定义为一系列字符,后跟回车\r、换行\n或回车后紧跟换行。

File.WriteAllLines

创建一个新文件,将指定的字符串数组写入文件,然后关闭文件。

样本:

string[] lines = File.ReadAllLines("filePath");

File.WriteAllLines("filePath", textBox.Text.Split(new[] {Environment.NewLine}));
于 2013-01-09T09:59:23.047 回答
0

您的解决方案是正确的,但非常冗长:

File.ReadAllLines ;

File.WriteAllText ;

所以你的阅读部分将是:

textBox1.Text = string.Join(Environment.NewLine, 
       File.ReadAllLines(filePath).Where(x=>!string.IsNullOrWhiteSpace(x)));

和写

 File.WriteAllText(filePath,textBox1.Text);
于 2013-01-09T10:03:19.163 回答