C#分块拷贝大文件

  //定义源文件和目标文件,绝对路径
   public static string source = @"E:\C#\C#编程语言详解.pdf";
    //2014-6-10 Training
            //拷贝大文件,分块拷贝
            AddBigFile(source);
    /// <summary>
        /// 拷贝大文件
        /// </summary>
        /// <param name="source">原绝对路径</param>
        private static void AddBigFile(string source)
        {
            int i = 0;
            using (FileStream fsRead = new FileStream(source, FileMode.Open))
            {
                byte[] byts = new byte[1024 * 1024 * 10];
                while (true)
                {
                    int r = fsRead.Read(byts, 0, byts.Length);

                    if (r <= 0)
                    {
                        Console.WriteLine("----End----");
                        break;
                    }
                    DataBaseController.AddFiles(source, i, byts);
                    Console.WriteLine("FileName:" + source + "" + i + "" + "大小:" + byts.Length);
                    i++;
                }
            }
        }

DataBaseController.AddFiles函数是拿到二进制数据,插入数据库操作:

 public static class DataBaseController
    {
       public static readonly string connstr = "Data Source=.;Initial Catalog=AddFile;Persist Security Info=True;User ID=sa;Password=sa";
       public static string Tosource = @"E:\C#\Copy123C#编程语言详解.pdf";

       public static void AddFiles(string FileName,int Code,byte[] Data)
       {
           string sql = @"insert into FileBlock(FileName, Code, Data) values(@FileName, @Code, @Data)";
           DateTime time = DateTime.Now;
           SqlParameter[] pars = {
                                new SqlParameter("@FileName",FileName),
                                new SqlParameter("@Code",Code),
                                new SqlParameter("@Data",Data)
                               
                                };
           int count = SqlHelper.ExecuteNonQuery(connstr, CommandType.Text, sql, pars);
       }

       public static void GetFilesByName(string FileName)
       {
           string sql = @"select * from FileBlock where FileName = @FileName";
           DateTime time = DateTime.Now;
           SqlParameter[] pars = {
                                new SqlParameter("@FileName",FileName),                    
                                };
           List<FileBlock> list = new List<FileBlock>();
           using (SqlDataReader reader = SqlHelper.ExecuteReader(connstr, CommandType.Text, sql, pars))
           {
               list = Application.Data2Objects<FileBlock>(reader);
           }

           //循环查出文件的多个块,拼接写在一个文件中
           FileStream fs = new FileStream(Tosource,FileMode.Create);
           foreach (var item in list)
           {
               fs.Write(item.Data,0,item.Data.Length);
           }

           //byte[] data = new byte[fs.Length];
           //fs.Read(data,0,fs.Length);
           //fs.Seek(0,SeekOrigin.Begin);
          // return data;
       }
    }

   public class FileBlock
   {
       public int ID { get; set; }
       public string  FileName { get; set; }
       public int Code { get; set; }
       public byte[] Data { get; set; }
   }

 

posted @ 2014-07-12 13:44  kanek  阅读(768)  评论(0编辑  收藏  举报