C#读取大文件(一)

简介:
最近一个项目需要将大文件写入和读取到数据库,觉得可能很多人也需要相关得东西,所以就将代码帖出来    
 
protected   int  state = 0;  //表示进度条当前处理的事件类型,1表读取word,2表写入word,3表doc转pdf,4表txt转pdf    
 
private  System.Windows.Forms.Form getDialog( string  strFormName,System.Drawing.Icon ico, string  strShowContent)    
    {    
     System.Windows.Forms.Form frm =  new  Form();    
      //初始化窗体    
     frm.Text = strFormName;    
     frm.Icon = ico;    
     frm.MaximizeBox =  false ;    
     frm.MinimizeBox =  false ;    
     frm.TopMost =  true ;    
     frm.ShowInTaskbar =  false ;    
     frm.Height = 168;    
     frm.Width = 544;    
     frm.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;    
 
      //添加控件    
     System.Windows.Forms.Label lblContent =  new  Label();    
     lblContent.Text = strShowContent;    
                        lblContent.Left = 30;    
     lblContent.Top = 20;    
     lblContent.Text = strShowContent;    
     frm.Controls.Add(lblContent);    
                            
                        System.Windows.Forms.ProgressBar prgLoader =  new  ProgressBar();    
     prgLoader.Left=30;    
     prgLoader.Top = lblContent.Top + lblContent.Height + 5;    
     prgLoader.Width = frm.Width - 2 * 30;    
     frm.Controls.Add(prgLoader);    
         
     System.Windows.Forms.Label lblShowPercent =  new  Label();    
     lblShowPercent.TextAlign = System.Drawing.ContentAlignment.MiddleRight;    
     lblShowPercent.Left = prgLoader.Width + 30 - lblShowPercent.Width;    
     lblShowPercent.Top = prgLoader.Height + prgLoader.Top + 5;    
                        lblShowPercent.Text = prgLoader.Value.ToString() +  "%" ;    
     lblShowPercent.Name =  "lblShowPercent" ;    
     frm.Controls.Add(lblShowPercent);    
 
     System.Windows.Forms.Button btnOK =  new  Button();    
     btnOK.Text =  "取消" ;    
     btnOK.Left = prgLoader.Width + 30 - btnOK.Width;    
btnOK.Top = frm.Height - 30 - btnOK.Height;    
     btnOK.Click += new  EventHandler(btnOk_Click);    
     frm.Controls.Add(btnOK);    
                            
      return  frm;    
    }    
 
     private   void  btnOk_Click( object  sender,System.EventArgs e)    
    {    
          //获取控件信息    
     System.Windows.Forms.Button btnOk = (System.Windows.Forms.Button)sender;    
         System.Windows.Forms.Form frm = (System.Windows.Forms.Form)btnOk.Parent;    
     System.Windows.Forms.ProgressBar prgLoader =  null ;    
      foreach (System.Windows.Forms.Control control  in  frm.Controls)    
     {    
         if (control.GetType().ToString() ==  "System.Windows.Forms.ProgressBar" )    
        {    
         prgLoader = (System.Windows.Forms.ProgressBar)control;    
        }    
     }    
      //判断当前的完成情况    
      if (prgLoader.Value == 100)    
     {    
        frm.Close();    
     }    
      else     
     {    
        System.Windows.Forms.DialogResult dr = MessageBox.Show(frm, "是否停止当前操作?" , "提示" ,System.Windows.Forms.MessageBoxButtons.YesNo,    
         System.Windows.Forms.MessageBoxIcon.Warning);    
         if (dr == System.Windows.Forms.DialogResult.Yes)    
        {     
         state = 0;    
         frm.Close();            
        }    
 
     }    
    }    
 
/// <summary>    
                 /// 写入word到数据库    
                 /// </summary>    
                 /// <param name="sqlcon">sql连接类</param>    
                 /// <param name="strTargetInsert">直接将目标内容写入数据库的sql,"insert into 表名(目标列名) values (@block)"</param>    
                 /// <param name="strTargetHandle">获取目标内容的句柄的sql,"select @content=textptr(目标列名) from 目标表名 where 条件"</param>    
                 /// <param name="strTableName">目标表名</param>    
                 /// <param name="strColumnName">目标列名</param>    
     /// <param name="strPath">要读取word的路径</param>    
                 /// <param name="intSetBlock">定义块大小</param>    
     /// <param name="bolShowDialog">是否显示进度条</param>    
     /// <param name="strFormName">窗体名称</param>    
     /// <param name="ico">窗体图标</param>    
     /// <param name="strShowContent">显示内容</param>    
                 /// <returns>true表成功</returns>    
     public   bool  WriteWordDocument(System.Data.SqlClient.SqlConnection sqlcon, string  strTargetInsert, string  strTargetHandle, string  strTableName, string  strColumnName, string  strPath, int  intSetBlock, bool  bolShowDialog, string  strFormName,System.Drawing.Icon ico, string  strShowContent)    
    {    
      //初始化SqlCommand    
     System.Data.SqlClient.SqlCommand sqlcmd =  new  System.Data.SqlClient.SqlCommand();    
     sqlcmd.Connection = sqlcon;    
     sqlcmd.CommandType = System.Data.CommandType.Text;    
 
      int  intBlock = intSetBlock;  //块大小    
      int  intCount = 0;  //分快数    
      int  intLength = 0;  //获取文件内容的长度    
      string  strSelect = "";  //要执行的sql查询语句    
      byte  []bytContent =  null //定义内容数组    
      //比例    
             int  intPercent = 0;    
      //建立要输入的文件流    
                        System.IO.FileStream fs =  null ;    
      //建立二进制读取    
     System.IO.BinaryReader br =  null ;    
      try     
     {    
        fs =  new  FileStream(strPath,System.IO.FileMode.Open);    
     }    
      catch     
     {    
         return   false ;    
     }    
     br =  new  BinaryReader((Stream)fs);    
                         //为关键参数赋值    
      try     
     {    
         //是否显示进度    
         if (bolShowDialog)    
        {    
          //获取精度窗体,引用窗体中的进度条和按钮控件    
         System.Windows.Forms.Form frmProgress = getDialog(strFormName,ico,strShowContent);    

         System.Windows.Forms.ProgressBar prgLoader = null;    



本文转自 BruceAndLee 51CTO博客,原文链接:http://blog.51cto.com/leelei/194144,如需转载请自行联系原作者

相关文章
|
前端开发 C#
C# Net MVC 大文件下载几种方式、支持速度限制、资源占用小
C# Net MVC 大文件下载几种方式、支持速度限制、资源占用小
|
大数据 C#
C# 读取大文件 (可以读取3GB大小的txt文件)
原文:C# 读取大文件 (可以读取3GB大小的txt文件) 在处理大数据时,有可能 会碰到 超过3GB大小的文件,如果通过 记事本 或 NotePad++去打开它,会报错,读不到任何文件。
4277 1
|
C# 内存技术
C# FileStream复制大文件
即每次复制文件的一小段,以节省总内存开销。当然,本机复制也可以采用.NET内部的System.IO.File.Copy方法。 本文转载:http://www.cnblogs.com/wolf-sun/p/3345392.html     FileStream缓冲读取和写入可以提高性能。
1391 0
|
2月前
|
C# 开发者
C# 一分钟浅谈:Code Contracts 与契约编程
【10月更文挑战第26天】本文介绍了 C# 中的 Code Contracts,这是一个强大的工具,用于通过契约编程增强代码的健壮性和可维护性。文章从基本概念入手,详细讲解了前置条件、后置条件和对象不变量的使用方法,并通过具体代码示例进行了说明。同时,文章还探讨了常见的问题和易错点,如忘记启用静态检查、过度依赖契约和性能影响,并提供了相应的解决建议。希望读者能通过本文更好地理解和应用 Code Contracts。
44 3
|
19天前
|
存储 安全 编译器
学懂C#编程:属性(Property)的概念定义及使用详解
通过深入理解和使用C#的属性,可以编写更清晰、简洁和高效的代码,为开发高质量的应用程序奠定基础。
71 12
|
2月前
|
设计模式 C# 图形学
Unity 游戏引擎 C# 编程:一分钟浅谈
本文介绍了在 Unity 游戏开发中使用 C# 的基础知识和常见问题。从 `MonoBehavior` 类的基础用法,到变量和属性的管理,再到空引用异常、资源管理和性能优化等常见问题的解决方法。文章还探讨了单例模式、事件系统和数据持久化等高级话题,旨在帮助开发者避免常见错误,提升游戏开发效率。
75 4