C#FileStream复制大文件

来源:互联网 发布:网络鸡汤是什么意思 编辑:程序博客网 时间:2024/04/30 06:53
即每次复制文件的一小段,以节省总内存开销。当然,本机复制也可以采用.NET内部的System.IO.File.Copy方法。
        ///<summary>
        ///复制文件
        ///</summary>
        ///<param name="fromFile">要复制的文件</param>
        ///<param name="toFile">要保存的位置</param>
        ///<param name="lengthEachTime">每次复制的长度</param>
        private void CopyFile(string fromFile, string toFile, int lengthEachTime)
        {
            FileStream fileToCopy = new FileStream(fromFile, FileMode.Open, FileAccess.Read);
            FileStream copyToFile = new FileStream(toFile, FileMode.Append, FileAccess.Write);
            int lengthToCopy;
            if (lengthEachTime < fileToCopy.Length)//如果分段拷贝,即每次拷贝内容小于文件总长度
            {
                byte[] buffer = new byte[lengthEachTime];
                int copied = 0;
                while (copied <= ((int)fileToCopy.Length - lengthEachTime))//拷贝主体部分
                {
                    lengthToCopy = fileToCopy.Read(buffer, 0, lengthEachTime);
                    fileToCopy.Flush();
                    copyToFile.Write(buffer, 0, lengthEachTime);
                    copyToFile.Flush();
                    copyToFile.Position = fileToCopy.Position;
                    copied += lengthToCopy;
                }
                int left = (int)fileToCopy.Length - copied;//拷贝剩余部分
                lengthToCopy = fileToCopy.Read(buffer, 0, left);
                fileToCopy.Flush();
                copyToFile.Write(buffer, 0, left);
                copyToFile.Flush();
            }
            else//如果整体拷贝,即每次拷贝内容大于文件总长度
            {
                byte[] buffer = new byte[fileToCopy.Length];
                fileToCopy.Read(buffer,0,(int)fileToCopy.Length);
                fileToCopy.Flush();
                copyToFile.Write(buffer, 0, (int)fileToCopy.Length);
                copyToFile.Flush();
            }
            fileToCopy.Close();
            copyToFile.Close();
        }
原创粉丝点击