zoukankan      html  css  js  c++  java
  • 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方法,不然无法写入文件,只是在缓冲区中。

  • 相关阅读:
    管理软件数据库备份策略
    融云群组同步策略
    Nginx中配置undertow进行两个项目的动静分离配置
    记录mysql正在执行的SQL语句
    RabbitMQ启动出现的问题与解决办法
    延迟任务的实现总结
    查找所有sphinx引擎表并生成创建表的语句
    go 学习笔记(4) --变量与常量
    go 学习笔记(4) import
    go 学习笔记(4) package
  • 原文地址:https://www.cnblogs.com/ServiceboyNew/p/2337876.html
Copyright © 2011-2022 走看看