龙空技术网

C# 使用流读取大型TXT文本文件

农码工 2055

前言:

现在大家对“c语言txt文件的读取”大约比较关注,朋友们都想要知道一些“c语言txt文件的读取”的相关文章。那么小编同时在网摘上汇集了一些有关“c语言txt文件的读取””的相关知识,希望小伙伴们能喜欢,小伙伴们快快来了解一下吧!

一、前言

业务需要读取txt的内容,导入到数据库当中,博主百度了各种方法,大部分都会导致内存溢出异常,由此结合网上的各种方法,解决了该异常。

二、程序框架

.NET 4.5

WinForm

三、具体实现

1.1 TXT结构

可以看到该文件大小300多兆,里面的条数差不多60w左右,每行当中的数据使用Tab分割

1.2 代码

private void NewInsert1306(string fileDir)        {            FileStream fs = new FileStream(fileDir, FileMode.Open, FileAccess.Read);//创建一个文件流 参数(文件位置,打开此文件(如果没有会抛异常),文件访问权限(只读))            StreamReader sr = new StreamReader(fs);//创建一个txt读取流,从字节流中读取字符 参数(流)            using (var db = new CFTech.His.Models.DbContext())            {                try                {                    Stopwatch sw = new Stopwatch();//计时器                    sw.Start();//开始计时                    int num = 0;//计算总条数                    db.BeginTransaction();            //死循环,由于不知道到底有几行,跳出时机在循环体内部判断                    while (true)                    {                        var arrList = new List<string>();//存放读取的数据                        while (true)                        {                            var str = sr.ReadLine();//读取一行内容返回改行的字符串(一个换行符一行),fs有一个fs.position属性(流的位置),该属性在进行任何读取操作时会根据读取的实际情况进行移动,当该位置到达流的末尾时,此方法返回null,该位置也可手动设置fs.position=xxx(long类型)                            if (str == null)                                break;//跳出时机就是读完的时候                            arrList.Add(str);                            if (arrList.Count > 10000)                                break;//该跳出用于入库,博主这里10000条入一次库                        }                        if (arrList.Count == 0)                            break;//当存放数据的list条数为0时,循环就可以结束了                        num += arrList.Count();                        ResBase res = Insert1306(arrList);//该方法就是具体的入库操作了,可根据自己的实际情况去写                        if (res.ErrCode == -1)                        {                            MessageBox.Show(res.ErrMsg);                            return;                        }                    }                    db.CommitTransaction();                    fs.Close();//释放文件流                    sw.Stop();//停止计时                    MessageBox.Show("入库条数:" + num.ToString()+"------" + "耗时:" + sw.Elapsed);                    return;                }       

标签: #c语言txt文件的读取 #net 读取txt文件内容 #c 读取txt