Console“自服务”读取文件

记得以前在DOS中,执行一个命令既可以是在DOS控制符下手动敲入一句句命令,回车执行;又可以写一个批处理,然后批量执行。实际上在C#(或者)VB.NET中,Console也可以处理一个批文件的效果(批量从一个文件中读取结果)。

假设你有一个文本文件,里边存放以下内容:

Hello

Word

Wei_Dong

…………

那么你可以这样做——

[C#]

StreamReader sr = new StreamReader(new FileStream("d:\\log.txt",FileMode.OpenOrCreate));
Console.SetIn(sr);
Console.WriteLine(Console.In.ReadToEnd());

[VB.NET]

Dim sr As New StreamReader(New FileStream("d:\log.txt", FileMode.OpenOrCreate))
Console.SetIn(sr)
Console.WriteLine(Console.[In].ReadToEnd())

这里解释一下——Console.ReadLine默认是从键盘流中读取内容,通过WriteLine输出到屏幕;因此我们要做的是把“键盘流”改成自定义的你那个特定的StreamReader对象(第一句代码);然后通过SetIn方法改变Console读取流的位置从而使得Console从“文件流”中读取内容。设想一下如果有一批学生成绩要处理,你可以预先写入文本文件中,然后读出处理,再使用Console.WriteLine输出即可。

注意这里的窍门是——Console.In通过SetIn方法改变Reader的对象(从默认键盘流到文件流)。然后使用In(StreamReader的ReadToEnd())方法即可。实际上如果只有一句话,你完全可以使用Console.ReadLine(),因为它默认就是调用了In的ReadLine()方法

同样地,我们也可以联想到如果我不想要Console输出内容到屏幕,而是到其它某个地方(比如做日志记录等)。那么我们完全可以——

[C#]

 StreamWriter sw = new StreamWriter(new FileStream("d:\\log.txt", FileMode.Append));
Console.SetOut(sw);
Console.WriteLine("1234567"+Console.Out.NewLine+"7654321"+Console.Out.NewLine);
Console.Out.Close();

[VB.NET]

Dim sw As New StreamWriter(New FileStream("d:\log.txt", FileMode.Append))
Console.SetOut(sw)
Console.WriteLine(("1234567" & Console.Out.NewLine & "7654321" & vbCr & vbLf & "1") + Console.Out.NewLine)
Console.Out.Close()

注意:

1)换行输出用NewLine属性而不能用\n,因为C#中写入文本在Windows中一个“换行”等于(回车+换行)。你可以等效于“\r\n”(VB.NET中可以用vbCr+vbLf)。
2)输出流Out必须关闭或者调用Flush方法,不然无法写入文件,只是在缓冲区中。

posted @ 2012-02-04 12:25  Serviceboy  阅读(853)  评论(0编辑  收藏  举报