长话短说
需求:记事本超过指定大小(100M)就把原有的记事本文件分割成多个100M以内的文件
有简便方法的欢迎讨论
老套做法:判断大小后 用读取器读取到指定行数 然后用写入器写入指定行数以保证生成的每个记事本都是100M以内的 这种方法就不用说了 这个是最后没办法了再用
我觉得应该是有现成的方法 或者类库可以用的,恳请大侠们告知,many tks!
最终还是老套做法解决的:
foreach遍历给定路径里的所有记事本文件,不论大小就开始读取,遇到超过70W行(100M左右) 每70W的倍数就进else先批量插入(BULK),没到70W行的就进下面的批量插入【未贴出代码,跟else里的一样】
if (totalCount % 700000 != 0) { dt.Rows.Add(row); } else { //超过70w行的就分批插入 否则一直追加到dataTable中 会内存溢出 SqlConnection conns = new SqlConnection(DBHelper.connStr); SqlBulkCopy bulks = new SqlBulkCopy(conns); conns.Open(); bulks.BatchSize = dt.Rows.Count; bulks.DestinationTableName = "Data"; bulks.BulkCopyTimeout = 600; //10分钟才超时(time out) bulks.WriteToServer(dt); bulks.Close(); conns.Close(); dt.Rows.Clear(); //清空dataTable 防止内存溢出 dt.Rows.Add(row); //添加当前行 否则每次符合if条件的行就没了 }//else end
百度 “TXT文件分割” 会有好多第三方软件,但是绝大多数软件的实现思路就是楼主说的那样,读取记事本内容,然后每几千行存一次生成新的文件。
参考实现的代码:
http://www.cnblogs.com/ttxs2010/archive/2010/11/24/txt.htm
不太可能先用三方软件遍历下我的记事本 然后再跑我的程序 不太实际
你贴的这个链接我完全没看明白,没没法直接用 还是感谢兄弟的热情回答
最终还是在我的程序里判断并切割的,最终实现方法看主贴的补充问题
读取记事本内容,然后每几千行存一次生成新的文件。基本是这样做的
同上
留个位置学习,其实我也想知道如何不用“老套做法”来做。
看看主帖吧 我觉得还可以,哈哈