/ r在每个单词之后

时间:2013-01-09 09:49:26

标签: c# filestream streamreader streamwriter

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

现在,一切都运作良好,阅读和写作。但现在如果我想发挥我的话,它总是比我输入的那个词更长。我通过调试发现我的程序以某种方式在每个单词后面加上“/ 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. ");
}

有谁能告诉我他是否认出错误? 感谢。

3 个答案:

答案 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)

使用File.ReadAllLines

  

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

     

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

File.WriteAllLines

  

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

样品:

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

File.WriteAllLines("filePath", textBox.Text.Split(new[] {Environment.NewLine}));

答案 2 :(得分:0)

你的解决方案是正确的,但是看起来很冗长:

File.ReadAllLines;

File.WriteAllText;

所以你的阅读部分将是:

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

并写

 File.WriteAllText(filePath,textBox1.Text);