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- 1行を除いて:

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

Windows システムでは、文字列が while で区切られた結果になります\n。したがって、分割後、文字列の最後に残ります。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 に答える