1、将文件pic_src.jpg复制到pic_des.jpg文件;

2、读写过程中断时,读写的中断位置会记录在“pic_des.jpgtemp.txt”文件里;

3、下次再启动程序时,程序会接着“pic_des.jpgtemp.txt”文件里记录的中断位置,继续读、写文件,直到完成传输;

具体代码实现,如下:

package mainimport ("fmt""os""strconv""io""log"//"time"
)func main() {/*断点续传:文件传递:文件复制srcFile 复制到 destFile思路:边复制,边记录复制的总量(记录总复制字节数保存至tempFile)复制一半中断后,若再次复制,会先读取tempFile文件里记录的已完成字节总数然后将这个字节数作为文件读写offset(偏移量),来结合whence(偏移位置)来决定后面读写文件的起点位置。seek(offset,whence),设置指针光标的位置第一个参数:偏移量第二个参数:如何设置0:seekStart表示相对于文件开始,1:seekCurrent表示相对于当前偏移量,2:seek end表示相对于结束。*/srcFile:="./0731/ddxc/pic_src.jpg"destFile:="./0731/ddxc/pic_des.jpg"tempFile:=destFile+"temp.txt"file1,err:=os.Open(srcFile)if err !=nil {log.Fatalln(err)}file2,_:=os.OpenFile(destFile,os.O_CREATE|os.O_WRONLY,os.ModePerm)file3,_:=os.OpenFile(tempFile,os.O_CREATE|os.O_RDWR,os.ModePerm)defer file1.Close()defer file2.Close()//1.读取临时文件中的数据,根据seekfile3.Seek(0,io.SeekStart)bs:=make([]byte,100,100)n1,err:=file3.Read(bs)fmt.Println(n1)countStr:=string(bs[:n1])fmt.Println(countStr)count,_:=strconv.ParseInt(countStr,10,64)fmt.Println(count)//2. 设置读,写的偏移量file1.Seek(count,0) // 设置file1下一次读或者写的起点file2.Seek(count,0) // 设置file2下一次读或者写的起点data:=make([]byte,1024,1024)n2:=-1// 读取的数据量, 默认值n3:=-1//写出的数据量total :=int(count)//读取的总量for{//3.读取数据// 基于上面的起点,读取file1文件len(data)个字节,// n2:实际读取的字节数(小于等于len(data),将读取的字节存入data。n2,err=file1.Read(data)if err ==io.EOF{fmt.Println("文件复制完毕。。")file3.Close()//os.Remove(tempFile) //复制完,先不删除,验证最后存储的字节总数是不是跟复制的文件大小一致。break}//将数据写入到目标文件// 基于上面的起点,向file2文件写入len(data[:n2])个字节,也就是写入data中前n2个元素;// n3:实际写入的字节数(小于等于n2)。n3,_=file2.Write(data[:n2])total += n3//将复制总量,存储到临时文件中file3.Seek(0,io.SeekStart) // 设置file3的下次读写起点为源点:0点,即覆盖重写。file3.WriteString(strconv.Itoa(total))//假装断电//if total>1800000{//  panic("假装断电了。。。,假装的。。。")//}}
}

4、检验下: 当文件复制完成后,pic_des.jpgtemp.txt文件里保存的字节数刚好等于传输文件大小,说明文件完整复制。

如下图:

Golang:实现断点续传(复制文件)相关推荐

  1. golang 复制 文件 文件夹

    在golang 中,复制文件是比较容易的,直接操作"io/ioutil"包就可以了,但是复制文件夹就有点麻烦了,需要一层层检查是否存在这个文件夹,不存在就创建文件夹, 实例如下: ...

  2. Golang复制文件夹同时复制文件

    请注明出处:https://blog.csdn.net/qq_23179075/article/details/83347698 Golang 复制文件夹,包括文件夹中的文件 /*** 拷贝文件夹,同 ...

  3. Linux10-归档、系统间复制文件

    目录 一.tar命令 二.scp.sftp命令 三.rsync命令 一.tar命令 tar命令可以归档文件.目录,提取创建的归档文件,同时进行压缩解压缩.使用tar选项时不需要加-,下面是常用的tar ...

  4. c#断点续传下载文件

    1.c#断点续传下载文件 using System; using System.Collections.Generic; using System.ComponentModel; using Syst ...

  5. 局域网ftp服务器传文件超时,ftp服务器复制文件超时

    ftp服务器复制文件超时 内容精选 换一换 在SAP系统中,如果选择共享文件系统由SFS Turbo而非NFS Server提供时,例如:SAP HANA中的backup卷或者shared卷,您需要创 ...

  6. cmd命令windows服务器间文件复制,cmd下面复制文件的速度是多少?

    巧用Win7多线程复制 提高操作速度 在进行大量的文件数据复制时,"龟速"可能会让一些朋友头疼不已:几百兆或几G的文件还算可以,但是文件有几十G甚至上百G的时候,估计这样的速度就让 ...

  7. copy 修改时间_DAY5-step3 Python用shutil.copy(), shutil.copystat()复制文件

    Python复制文件的方法 Python提供了内置函数,可使用操作系统Shell工具轻松复制文件. 以下命令用于复制文件 shutil.copy(src,dst) 以下命令用于复制带有元数据信息的文件 ...

  8. scp服务器复制命令跳过已有的文件夹,Linux scp命令复制文件到其它服务器上

    例如:我想将59.64.30.101中的文件复制到59.64.28.78服务器.步骤如下: 1.59.64.30.101终端执行如下命令 #ssh-keygen -t rsa 2.密钥生成后会在/ro ...

  9. JAVA IO流复制文件夹及里面的所有文件

    public static void main(String[] args) throws Exception {//复制到哪个路径(path)中String path = "E:\\mai ...

  10. Linux复制文件scp

    cp 复制文件(copy) cp sourcefile destfile scp 跨服务器复制(secure copy) (1) 复制文件: scp local_file remote_usernam ...

最新文章

  1. Linux 下杀毒软件 CPU 占用率为何持续升高?
  2. Python Scrapy 安装及相关配置
  3. Docker 17.12.0 发布
  4. poj2826 An Easy Problem?!(计算几何)
  5. ansys怎么删除线段_科学网—ansys常用命令 - 刘敬寿的博文
  6. 详解malloc,calloc,realloc原理及其模拟实现
  7. 至尊版影视双端app源码对接苹果CMS 带商城码支付
  8. 一、SecureCRT 8.0 客户端连接服务器
  9. 现在的女孩找男朋友都是怎么考虑的?
  10. linux系统运行application,[分享]分享曾经做过的一个嵌入式系统application框架 | 勤奋的小青蛙...
  11. python time时间戳和格式化日期_[转] Python之time模块的时间戳、时间字符串格式化与转换...
  12. OpenCV_连通区域分析----Two-Pass法
  13. c语言大神,C语言入门大神有话说(一)
  14. 微信朋友圈分享详细步骤html,微信如何转发朋友圈图文(朋友圈转发图文教程分享)...
  15. MessageQueue-JNI: Exception in MessageQueue callback: handleReceiveCallback
  16. PXE无盘WIN98网络安装指南(转)
  17. springMvc中的校验框架@valid和@validated
  18. HyperMesh二次开发教程 - 前言
  19. Redis 部署方式(单点、master/slaver、sentinel、cluster) 概念与区别
  20. win11安装低版本CAD报致命错误解决方案

热门文章

  1. 高防CDN相比普通CDN的优势有哪些?
  2. 最热门的网络游戏排行榜及分析
  3. mysql查询学生姓名_查询全体学生的姓名及其出生年份 (数据库)
  4. 第四次团队作业——项目Alpha版本发布
  5. 并发模拟的四种方式+工具,超级实用!
  6. 如何预置Android 手机 APK
  7. iOS开发-声网Agora Demo
  8. 【python】采集**本子,不要看了,快进来~
  9. 【多元统计分析】因子分析——SPSS上机实验(过程+结果分析)
  10. 函数与导数部分的题型梳理【中阶和高阶辅导】