package main
import (
"fmt"
"io"
"os"
"strconv"
"strings"
)
func main() {
/*
断点续传
C:\Users\12905\Desktop\新建文件夹\goproject\src\owen\main\test.jpg
复制到当前工程下
*/
srcFile:="./main/test.jpg"//源文件目录
defFile:=srcFile[strings.LastIndex(srcFile,"/")+1:]//源文件后缀名
fmt.Println(defFile)
//源文件
file1,err:=os.Open(srcFile)//打开文件建立链接
Modelerr(err)//错误显示
//目标文件
goalsrc:=srcFile+"goalsrc.jpg"
file2,err:=os.OpenFile(goalsrc,os.O_CREATE|os.O_WRONLY,os.ModePerm)
Modelerr(err)
//临时文件
tmpFile:=defFile+"temp.txt"
file3,err:=os.OpenFile(tmpFile,os.O_CREATE|os.O_RDWR,os.ModePerm)
Modelerr(err)
file3.Seek(0,io.SeekStart)
defer file1.Close()
defer file2.Close()
bs:=make([]byte,100,100)
n1,err:=file3.Read(bs)
//Modelerr(err)
countStr:=string(bs[:n1])
count,err:=strconv.ParseInt(countStr,10,64)
//Modelerr(err)
fmt.Println(count)
//step2:设置读,写的位置
file1.Seek(count,io.SeekStart)
file2.Seek(count,io.SeekStart)
data:=make([]byte,1024,1024)
n2:=-1//读取的数据量
n3:=-1//写出的数据量
total:=int(count)//读取的总量
//step3
for{
n2,err=file1.Read(data)
if err==io.EOF||n2==0{
fmt.Println("文件复制完毕。。。")
file3.Close()
os.Remove(tmpFile)
break
}
n3,err=file2.Write(data[:n2])
total+=n3
//将复制的总量,存储到临时文件中
file3.Seek(0,io.SeekStart)
file3.WriteString(strconv.Itoa(total))
fmt.Println("total 总量:",total)
}
}
func Modelerr(err error){
if err!=nil{
panic(err)
}
}
go 中简单断点续传
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
相关阅读更多精彩内容
- ResumeFromBreakPoint Swift实现断点续传,Demo简单易懂,没有太多复杂模块和逻辑,完整体...
- 目录 第一: 断点续传概述 断点续传就是从文件上次中断的地方开始重新下载或上传数据,而不是从文件开头。 第二: 断...
- 复杂功能总是由许多小功能组合在一起完成的,一步一步完成多线程断点续传,可以从以下几个方面来考虑。第一,实现简单的下...
- 英孚家长: 您好! 孩子今天学习了U8L3-U8L4 1.复习了运动项目的名词,同时学习一些副词如:快地 quic...