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方法,不然无法写入文件,只是在缓冲区中。

  • 相关阅读:
    外校培训前三节课知识集合纲要(我才不会告诉你我前两节只是单纯的忘了)
    floyd算法----牛栏
    bfs开始--马的遍历
    (DP 线性DP 递推) leetcode 64. Minimum Path Sum
    (DP 线性DP 递推) leetcode 63. Unique Paths II
    (DP 线性DP 递推) leetcode 62. Unique Paths
    (DP 背包) leetcode 198. House Robber
    (贪心 复习) leetcode 1007. Minimum Domino Rotations For Equal Row
    (贪心) leetcode 452. Minimum Number of Arrows to Burst Balloons
    (字符串 栈) leetcode 921. Minimum Add to Make Parentheses Valid
  • 原文地址:https://www.cnblogs.com/ServiceboyNew/p/2337876.html
Copyright © 2011-2022 走看看