0
点赞
收藏
分享

微信扫一扫

C#基础 FileStream Read 读取txt中的内容并输出到控制台


  • .NET Framework : 4.7.2
  •        IDE : Visual Studio Community 2019
  •         OS : Windows 10 x64
  •     typesetting : Markdown

txt file - utf8

道德经-第八章
上善若水。
水善利万物而不争,处众人之所恶,故几于道。
居善地;心善渊;与善仁;言善信;政善治;事善能;动善时。
夫唯不争,故无尤。

道德经-第十五章
古之善为士者,微妙玄通,深不可识。夫惟不可识,故强为之容。
豫兮若冬涉川,犹兮若畏四邻,俨兮其若客,涣兮若冰之将释,孰兮其若朴,旷兮其若谷,浑兮其若浊。
孰能浊以澄静之徐清?孰能安以久动之徐生?保此道者不欲盈,夫惟不盈,故能敝不新成。

错误的示例

code

using System;
using System.IO;
using System.Text;

namespace ConsoleApp
{

    class Program
    {
        static void Main(string[] args)
        {
            string path = "TaoTeChing-utf8.txt";

            //byte字节,B,1KB=1024B,1M=1024K
            byte[] b = new byte[1024 * 1024];

            // 这个构造函数很多,为了防止抛异常,
            //         FileMode.OpenOrCreate:选择如果文件存在就打开,没有就创建
            //               FileAccess.Read:读文件
            FileStream fileRead = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Read);

            // 读取来的数据放在字节数组b中,从头开始读,所以为0.读1024*1024个字节
            int r = fileRead.Read(b, 0, b.Length);

            // 字节数组看不懂,所以要进行编码,转化成string
            // 这样写的话,你会发现出现错误。的确控制台有输出,但是输出后面有许多空格似得
            string contents = Encoding.Default.GetString(b);

            Console.WriteLine(contents);
            Console.ReadKey();
        }
    }
}

result

正确但乱码的示例

code

using System;
using System.IO;
using System.Text;

namespace ConsoleApp
{

    class Program
    {
        static void Main(string[] args)
        {
            string path = "TaoTeChing-utf8.txt";
            byte[] b = new byte[1024 * 1024];
            FileStream fileRead = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Read);
            int r = fileRead.Read(b, 0, b.Length);


            // 这句话发生了改变
            string contents = Encoding.Default.GetString(b, 0, r);

            Console.WriteLine(contents);
            Console.ReadKey();
        }
    }
}

result

閬撳痉缁?绗叓绔?
涓婂杽鑻ユ按銆?
姘村杽鍒╀竾鐗╄€屼笉浜夛紝澶勪紬浜轰箣鎵€鎭讹紝鏁呭嚑浜庨亾銆?
灞呭杽鍦帮紱蹇冨杽娓婏紱涓庡杽浠侊紱瑷€鍠勪俊锛涙斂鍠勬不锛涗簨鍠勮兘锛涘姩鍠勬椂銆?
澶敮涓嶄簤锛屾晠鏃犲挨銆?

閬撳痉缁?绗崄浜旂珷
鍙や箣鍠勪负澹€咃紝寰鐜勯€氾紝娣变笉鍙瘑銆傚か鎯熶笉鍙瘑锛屾晠寮轰负涔嬪銆?
璞叜鑻ュ啲娑夊窛锛岀姽鍏嫢鐣忓洓閭伙紝淇ㄥ叜鍏惰嫢瀹紝娑e叜鑻ュ啺涔嬪皢閲婏紝瀛板叜鍏惰嫢鏈达紝鏃峰叜鍏惰嫢璋凤紝娴戝叜鍏惰嫢娴娿€?
瀛拌兘娴婁互婢勯潤涔嬪緪娓咃紵瀛拌兘瀹変互涔呭姩涔嬪緪鐢燂紵淇濇閬撹€呬笉娆茬泩锛屽か鎯熶笉鐩堬紝鏁呰兘鏁濅笉鏂版垚銆?

思考与改进

code

using System;
using System.IO;
using System.Text;

namespace ConsoleApp
{

    class Program
    {
        static void Main(string[] args)
        {
            string path = "TaoTeChing-utf8.txt";
            byte[] b = new byte[1024 * 1024];
            FileStream fileRead = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Read);
            int r = fileRead.Read(b, 0, b.Length);


            // 这句话发生了改变
            string contents = Encoding.UTF8.GetString(b, 0, r);

            Console.WriteLine(contents);
            Console.ReadKey();
        }
    }
}

result

道德经-第八章
上善若水。
水善利万物而不争,处众人之所恶,故几于道。
居善地;心善渊;与善仁;言善信;政善治;事善能;动善时。
夫唯不争,故无尤。

道德经-第十五章
古之善为士者,微妙玄通,深不可识。夫惟不可识,故强为之容。
豫兮若冬涉川,犹兮若畏四邻,俨兮其若客,涣兮若冰之将释,孰兮其若朴,旷兮其若谷,
浑兮其若浊。
孰能浊以澄静之徐清?孰能安以久动之徐生?保此道者不欲盈,夫惟不盈,故能敝不新成。

释放资源的意识

code

using System;
using System.IO;
using System.Text;

namespace ConsoleApp
{

    class Program
    {
        static void Main(string[] args)
        {
            string path = "TaoTeChing-utf8.txt";
            byte[] b = new byte[1024 * 1024];
            FileStream fileRead = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Read);
            int r = fileRead.Read(b, 0, b.Length);

            // 新增了这两行代码
            fileRead.Close();
            fileRead.Dispose();

            string contents = Encoding.UTF8.GetString(b,0,r);

            Console.WriteLine(contents);
            Console.ReadKey();
        }
    }
}

result

道德经-第八章
上善若水。
水善利万物而不争,处众人之所恶,故几于道。
居善地;心善渊;与善仁;言善信;政善治;事善能;动善时。
夫唯不争,故无尤。

道德经-第十五章
古之善为士者,微妙玄通,深不可识。夫惟不可识,故强为之容。
豫兮若冬涉川,犹兮若畏四邻,俨兮其若客,涣兮若冰之将释,孰兮其若朴,旷兮其若谷,
浑兮其若浊。
孰能浊以澄静之徐清?孰能安以久动之徐生?保此道者不欲盈,夫惟不盈,故能敝不新成。

resource

  • [文档] docs.microsoft.com/zh-cn/dotnet/csharp
  • [规范] github.com/dotnet/docs/tree/master/docs/standard/design-guidelines
  • [源码] referencesource.microsoft.com
  • [ IDE ] visualstudio.microsoft.com/zh-hans
  • [.NET Core] dotnet.github.io

感恩曾经帮助过 心少朴 的人。
C#优秀,值得学习。.NET Core具有跨平台的能力,值得关注。
Console,WinForm,WPF,ASP.NET,Azure WebJob,WCF,Unity3d,UWP可以适当地了解。
注:此文是自学笔记所生,质量中下等,故要三思而后行。新手到此,不可照搬,应先研究其理象数,待能变通之时,自然跳出深坑。

C#基础 FileStream Read 读取txt中的内容并输出到控制台_System


举报

相关推荐

0 条评论