C#实现大文件的分割复制

使用FileStream类将文件以指定的文件流大小进行分割,追加到一个同名的空文件,该类支持异步操作,实例代码分享

例:

Public void Copyfile(stringFormerfile,string tofile,int sectsize)

{

         FileStreamfiletocreate=new FileStream(tofile,FileMode.Create); //创建目的文件,如果已存在则覆盖

         filetocreate.Close();                  //关闭所有资源

         filetocreate.Dispose();    //释放所有资源

         FormerOpen=newFileStream(FormerFile,FileMode.Open,FileAccess.Read);        

                                                        //以只读方式打开源文件

         Tofileopen=newFileStream(tofile,FileMode.Append,FileAccess.Write);

                                                        //以写方式打开目的文件

         //根据一次传输的大小,计算传输的个数

         Int Fileesize;                         //要复制文件的大小

         //如果分段复制,即每次复制内容小于文件总长度

         If(sectsize<FormerOpen.Length)

{

                byte[]buffer=new byte[sectsize];

Int copied=0;                                //记录传输的大小

While(copied<=((int)FormerOpen.Length-sectsize))

{

FileSize=FormerOpen.Read(buffer,0,sectsize);      //从0开始读,每次最大读sectsize

FormerOpen.Flush();                     //清空缓存

Tofileopen.Write(buffer,0,sectsize);    //向目的文件写入字节

TofileOpen.Flush();                    

Tofileopen.Position=FormerOpen.Position;//使源文件和目的文件流的位置相同

copied+=FileSize;                       //记录已复制的大小

}

Int left=(int)FormerOpen.Length-copied; //获取剩余大小

FileSize=FormerOpen.Read(buffer,0,left);//读取剩余的字节

FormerOpen.Flush();

Tofileopen.Write(buffer,0,left);

tofileOpen.Flush();

}

//如果整体复制

         Else

{

         Byte[] buffer=new byte[FormerOpen.Length];

         FormerOpen.Read(buffer,0,(int)FormerOpen.Length);

         FormerOpen.Flush();

         Tofileopen.Write(buffer,0,(int)FormerOpen.Length);

         Tofileopen.Flush();

}

FormerOpen.Close();                          // 释放所有资源

tofileOpen.close();

}

猜你喜欢

转载自blog.csdn.net/flyking2/article/details/78991774