02-大文件Copy(FileStream文件流类)

static void Main(string[] args)
{
    string source = @"e:\1.exe";//要移动文件的路径 大文件
    string target = @"f:\1.exe";//将文件移动到的目标路径
    CopyFile(source, target);
    Console.ReadKey();
}

private static void CopyFile(string source, string target)
{
    //1.创建一个读取文件的流
    using (FileStream fsRead = new FileStream(source, FileMode.Open))
    { 
       //2.创建一个写入文件的流
       using (FileStream fsWrite = new FileStream(target, FileMode.Create))
        { 
            //3.创建一个读取文件、写入文件的缓冲区
            byte[] buffer = new byte[1024 * 1024 * 10];//缓冲区大小为10M
            long fsLen = fsRead.Length;//获取源文件的总字节数
            while (true)//4.开始读取、写入文件
            {
                //返回值r表示本次实际读取到的字节数 fsRead.Position属性表示当前流的位置
                int r = fsRead.Read(buffer, 0, buffer.Length);

                #region 文件加密操作 255-189 字节就会变,加入到的文件字节就变了
                //for (int i = 0; i < buffer.Length; i++)
                //{
                //    buffer[i] = (byte)(Byte.MaxValue - buffer[i]);
                //}
                #endregion

                if (r <= 0)//表示读取到了文件的末尾
                {
                    break;
                }
                //如果r>0,则表示本次读取到了内容,将读取出来的buffer内容写入到fsWrite文件流中。
                else 
                {
                    fsWrite.Write(buffer, 0, r);//注意长度是 r
                    long lenAlready = fsWrite.Length;
                    double proc = (double)lenAlready / fsLen;
                    //double proc = (double)fsWrite.Position / len;
                    Console.WriteLine("拷贝进度:{0}%", proc * 100);
                 }
            }
       }
 }

 

posted on 2015-01-29 14:05  zy`  阅读(636)  评论(0编辑  收藏  举报

导航