【问题标题】:How to write/append select output text to one file in C#?如何在 C# 中将选择输出文本写入/附加到一个文件?
【发布时间】:2011-06-01 18:17:45
【问题描述】:

所以我用 C# 创建了一个程序,它基本上可以跟踪棒球/垒球比赛的统计数据,而我要做的就是创建一个“游戏日志”,将游戏中的精彩时刻输出到一个文件中。因此,例如,虽然我希望控制台上的输出提示我的命令等(虽然我仍然希望它也显示游戏中的事件),但我还想编写那些游戏中的事件,如球场、球将比赛、得分等信息放入我指定的一个特定文件中。

我尝试过使用 StreamWriter,但问题是:

  • 我似乎只能允许我的文本输出到控制台或文件。
  • 我不想所有我的文本输出到文件,只输出某些事件。

所以,这是我的代码输出在控制台上的示例(粗体部分是我希望在指定输出文件中作为控制台的内容,斜体部分是我的输入)。请注意,这里的布局并不像我希望的那样工作,但在我的控制台上看起来不错:

               R       H       E       LOB
Lady Sharks     0       0       0       0
Home Team       0       0       0       0

**Top 1**, 0 outs.

1B:
2B:
3B:

**1) K. Robinson #7** -- Today: 0 for 0

Count 0-0: *b*
**Ball.**

Count 1-0: *f*
**Foul Ball.**

Count 1-1: *p*
Ball is put in play.

Enter hit type (g/f): *g*
Enter hit zone (1-6): *4*

Enter result.

Choose from: 1b, 2b, 3b, hr, g, f, sh, sf, fc, e, gdp, di, bi
*1b*

Did the batter-runner advance any extra bases?

**In play, no out.
(1-1) K. Robinson singles on a ground ball to left field. 0 out.**

                R       H       E       LOB
Lady Sharks     0       1       0       0
Home Team       0       0       0       0

Top 1, 0 outs.

1B: K. Robinson #7
2B:
3B:

**2) S. Ribeiro #9** -- Today: 0 for 0

Count 0-0: *s*
**Swinging Strike.**

Count 0-1: *f*
**Foul Ball.**

Count 0-2: *s*
**Swinging Strike.**

Batter strikes out swinging. Confirm? (y/n)
*y*

Update status of runner on 1st, #7.

Batter may have reached base on exception. Indicate how many bases traveled with
 "+" signs.

This will result in an out. Are you sure? (y/n)
*y*

**(0-2) S. Ribeiro strikes out swinging. 1 out.**

                R       H       E       LOB
Lady Sharks     0       1       0       0
Home Team       0       0       0       0

Top 1, 1 out.

1B: K. Robinson #7
2B:
3B:

**3) B. Sutton #11 -- Today: 0 for 0**

Count 0-0: *b*
**Ball.**

Count 1-0: *b*
**Ball.**

Count 2-0: *sb*
Select which base the runner attemped to steal from.
*1*

Runner steals second base. Confirm? (y/n)
*y*

**K. Robinson steals second base.**

                R       H       E       LOB
Lady Sharks     0       1       0       0
Home Team       0       0       0       0

Top 1, 1 out.

1B:
2B: K. Robinson #7
3B:

3) B. Sutton #11 -- Today: 0 for 0

Count 2-0: *p*
Ball is put in play.

Enter hit type (g/f): *g*
Enter hit zone (1-6): *3*

Enter result.

Choose from: 1b, 2b, 3b, hr, g, f, sh, sf, fc, e, gdp, di, bi
*sh*

Update status of runner on 2nd, #7.
*+*
Batter may have reached base on exception. Indicate how many bases traveled with
 "+" signs.

This will result in an out. Are you sure? (y/n)
*y*

**In play, out(s).
(2-0) B. Sutton out on a sacrifice bunt. K. Robinson to 3rd. 2 outs.**

                R       H       E       LOB
Lady Sharks     0       1       0       0
Home Team       0       0       0       0

Top 1, 2 outs.

1B:
2B:
3B: K. Robinson #7

**4) S. Van Belleghem #29** -- Today: 0 for 0

Count 0-0: *p*
Ball is put in play.

Enter hit type (g/f): *f*
Enter hit zone (1-6): *5*

Enter result.

Choose from: 1b, 2b, 3b, hr, g, f, sh, sf, fc, e, gdp, di, bi
*f*

Update status of runner on 3rd, #7.

Middle of 1

**0 runs, 1 hit, 0 errors, 1 left on base**

Due up:

1) #1
2) #5
3) #3

Press enter to continue to Bottom 1.

同样,我只想将那些粗体部分写入一个文件,称为“游戏 7 日志”。然后我会为每场比赛做一个,这样我就可以保存每场比赛的这些记录,投球对投球,击球手对击球手。如果有人知道我如何将这些选定的文本放入一个文件中而不需要在我的控制台上取出任何信息,谢谢!

【问题讨论】:

    标签: c# file text stream


    【解决方案1】:

    你如何写入控制台。简单的 Console.WriteLine?我会使用这样的方法:

    • 创建一个您使用的辅助方法,而不是直接调用 Console.Writeline

    • 定义一个标准,说明哪一行(“事件”)进入控制台,哪一行进入控制台和一个文件(这可以是单独的方法、方法上的布尔/枚举参数,或者给你的方法的字符串的一些字符)

    一个非常基本的实现如下所示:

    public void Write(string Message, bool AlsoWriteToFile) {
      if(AlsoWriteToFile) {
        using(StreamWriter s = new StreamWriter("filename.txt") {
          s.WriteLine(Message);
        }
      }
      Console.WriteLine(Message);
    }
    

    【讨论】:

    • 啊,这可能行得通!我一会儿试试,谢谢!所以我也忘了提到我想追加到同一个文件而不是每次都创建一个新文件。因此,如果我这样做,“使用”功能将保持在同一个文件中吗?如果是这样,非常感谢!我会尽快尝试的。
    • 好吧,看起来我很接近了,但唯一的问题似乎仍然是我刚刚插入到下面的 cmets 中的那个......我无法附加到同一个文件我第一次写信,如果这有意义的话。所以每当我调用这个方法时,它似乎会覆盖我之前在那里写的内容。我正在尝试找到一种方法,以便每次调用此方法时都可以继续写入同一个文件。否则,这是完美的!
    • 你只需要告诉 StreamWriter 追加: new StreamWriter("filename.txt", true) 还要记住你想更好地保护它。例如。当文件被锁定、用户没有权限等时会发生什么。
    • 漂亮!看来我可以从这里解决它。如果我有任何其他问题,看起来你是该问的人哈哈。祝福你,好先生! :)
    猜你喜欢
    • 2016-05-13
    • 2020-08-24
    • 1970-01-01
    • 1970-01-01
    • 2011-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-06
    相关资源
    最近更新 更多