C# 记事本分割问题

心态要好 2012-11-19 10:12:08
长话短说
需求:记事本超过指定大小(100M)就把原有的记事本文件分割成多个100M以内的文件

有简便方法的欢迎讨论
老套做法:判断大小后 用读取器读取到指定行数 然后用写入器写入指定行数以保证生成的每个记事本都是100M以内的 这种方法就不用说了 这个是最后没办法了再用

我觉得应该是有现成的方法 或者类库可以用的,恳请大侠们告知,many tks!
...全文
224 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
心态要好 2012-11-20
  • 打赏
  • 举报
回复
最终还是老套做法解决的: 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
心态要好 2012-11-19
  • 打赏
  • 举报
回复
引用 3 楼 bdmh 的回复:
用内存 映射,api的函数,可以一块一块加载文件,然后保存http://blog.csdn.net/gaozhigang/article/details/5622319
这个貌似不能直接调用,并且比我说的老套方法还麻烦(对我来说) 一会去研究下吧 话说bz 问下 为什么我的结贴率就50% 上次我发了一个帖子 结了啊 结贴后是100% 今天发这个帖子看就50%了
bdmh 2012-11-19
  • 打赏
  • 举报
回复
用内存 映射,api的函数,可以一块一块加载文件,然后保存http://blog.csdn.net/gaozhigang/article/details/5622319
bookc-man 2012-11-19
  • 打赏
  • 举报
回复
帮你顶,菜鸟路过,你还是去博客里面转一转吧,那里面说不定能有
心态要好 2012-11-19
  • 打赏
  • 举报
回复
尝试使用读取器(streamReader)读取,写入器(streamWriter)写入,巨麻烦。顶上去,欢迎大家讨论其他方法
  • 打赏
  • 举报
回复
引用 1 楼 kalagooooo 的回复:
尝试使用读取器(streamReader)读取,写入器(streamWriter)写入,巨麻烦。顶上去,欢迎大家讨论其他方法
用BinaryReader,BinaryWriter读写二进制文件比较,不需要知道行数,也不需要考虑编码问题,原来是什么就是什么
bookc-man 2012-11-19
  • 打赏
  • 举报
回复
引用 4 楼 kalagooooo 的回复:
引用 3 楼 bdmh 的回复:用内存 映射,api的函数,可以一块一块加载文件,然后保存http://blog.csdn.net/gaozhigang/article/details/5622319 这个貌似不能直接调用,并且比我说的老套方法还麻烦(对我来说) 一会去研究下吧 话说bz 问下 为什么我的结贴率就50% 上次我发了一个帖子 结了啊 结贴后是100% 今……
结贴率是这样算的 结贴率=你已经结的帖子/你发的全部帖子的和 楼主?懂没???
第一天 我认为ASP.NET比ASP难很多,希望大家做好准备。难难在实现同一个效果有很多方法,大家或许会疑惑。十天学会系列教程会清晰的写出各种方法,让大家能少一点坎坷。在ASP里面,大家几乎都是使用VB,数据库嘛,也无非是SQL和ACCESS。在ASP.NET里面,数据库还是这两个但是常用的语言多了一个C#,也是微软推荐的语言,为.NET平台定制的语言。这样ASP.NET就有四种组合:VB+ACCESS,VB+SQL,C#+ACCESS,C#+SQL,本教程会使用C#+ACCESS,兼顾四种来写,让大家对ASP.NET有一个全面的认识。虽然说学习ASP.NET不需要任何ASP基础,但是我觉得如果大家ASP不会,还是先看一下【十天学会ASP教程】,大家所需要了解的不是ASP的程序怎么写,而是怎么构建服务器,怎么使用HTML表单,同时对SQL语句有一个基础和理解,因为在本文里我不会将将一些基础的东西。 废话不多说,开始我们第一天的学习: 学习目的:调试出安装环境 我要申明一点,操作系统就用2000,如果说要学习一个网络语言还不肯多装一个操作系统的话,那我看也不要学习了。 先到网上下载一个MDAC(要是2.7以上的版本才行),然后安装,安装以后或许会重新启动一次。 然后再下载一个.NET FRAMEWORK SDK,安装以后会在控制面板里面的管理工具里面多两个东西,这个不用理睬他,我们要使用的还是原来的INTERNET服务管理器。打开它按照ASP教程里面的调试方法建立一个目录,建立一个EXAMPLE1.ASPX,然后用记事本打开这个文件在里面输入 <script language="c#" runat="server"> void Page_Load() { Response.Write("Hello World!"); } sub page_load() response.write("Hello World!") end sub C#和VB写的,演示的图片就用C#那一种的,都一样嘛,教程里面代码也是写两种用
分割开,大家可以比较一下。2、我写教程的时候用的都是记事本来编写APS.NET大家也可以安装VS.NET来编写不过起步还是用记事本比较好,因为可以看的更加透彻一点。

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧