使用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();
}