C#之I/O系统(二)

(二)控制台I/O

控制台的I/O是通过标准的数据流Console.In,Console.Out,Console.Error实现的。

Console.In是TextReader类的一个实例,可以使用TextReader类定义的方法。但是,一般情况下,我们使用的是Console类提供的方法,共有三个方法,它们分别是Read(),ReadLine()和ReadKey()函数。

读取单个字符时通常使用Read()函数,它为静态函数,用于从控制台读取下一个字符,返回所读取字符的int类型的值,如果需要使用该字符,必须使用char关键字进行强制类型转换。该方法在调用失败时返回-1,并抛出IOException异常。

默认情况下,控制台输入都是逐行缓冲的,因此必须按下Enter键将输入的字符发送给程序。在按下Enter键时,系统会把一个包含回车键的换行序列放到输入数据流中,字符在被读取之前一直存储在输入缓冲区中。

如果需要读取一个字符串,那么我们需要使用ReadLine()函数了,该函数一直读取字符并在用户按下Enter键时以String对象的形式返回这些字符。

在.NET Framework 2.0以后,Console类增添了一个新的方法ReadKey(),该函数以非逐行缓冲的方式读取按键。

ReadKey()方法有两种形式,如下所示:

static ConsoleKeyInfo ReadKey();

static ConsoleKeyInfo ReadKey(bool intercept);

第一种形式将等待从键盘的输入,当用户按下某个按键时,立即返回该键,并在屏幕上显示相应的键。第二种形式也等待从键盘输入,当有键按下时立即返回该键,如果intercept为真,就不会显示该键,如果intercept为键,则屏幕上显示相应的键。

从上面的函数定义可以看到,该函数返回一个ConsoleKeyInfo对象,该对象时一个结构体,包含下面的只读属性:

char KeyChar

ConsoleKey Key

ConsoleModifiers Modifiers

其中,KeyChar属性包含了与所按下的键相匹配的char类型值。Key属性包含了一个ConsoleKey枚举定义的枚举值,ConsoleKey枚举定义了与键盘上所有按键相对应的键值。

ConsoleModifiers枚举定义了键盘按键的修饰符,如Shift,Ctrl和Atl。

Console.Out和Console.Error都是TextWriter类型的对象,虽然可以调用它定义的方法进行输出,但是由于Console类定义了自己的输出函数Write函数和WriteLine函数,所以可以直接调用它们。

Console.Error在默认情况下是输出写入到控制台,但是我们可以重定向到一个磁盘文件,而不是屏幕,将错误信息输出到日志文件中并且不影响控制台的输出。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值