segmented copy file (for network file transfer resume)

来源:互联网 发布:oracle数据库笔试题 编辑:程序博客网 时间:2024/06/06 08:31



        private long SectionedCopy(string srcFile, long startPos, string dstFile, bool sectioned)
        {
            byte[] buffer = new byte[1024];
            int bytesRead = 0;
            long savedBytes = startPos;

            long fileSize = new FileInfo(srcFile).Length;

            if (startPos >= fileSize)
                return fileSize;

            using (FileStream fsInput = new FileStream(srcFile, FileMode.Open, FileAccess.Read))
            {
                using(FileStream fsOutput = new FileStream(dstFile, FileMode.Append, FileAccess.Write))
                {
                    fsInput.Seek(startPos, SeekOrigin.Begin);

                    while (savedBytes < fileSize)
                    {
                        bytesRead = fsInput.Read(buffer, 0, buffer.Length);
                        fsOutput.Write(buffer, 0, bytesRead);
                        savedBytes += bytesRead;
                    }
                }
            }

            return savedBytes;
        }
    }

原创粉丝点击