Go基础_1_62 断点续传
Tutorial: Go初级
Category: Go
Published: 2026-04-07 13:58:26
Views: 21
Likes: 0
Comments: 0
package main
import (
"fmt"
"io"
"log"
"os"
"strconv"
"strings"
)
func HandleErr(err error) {
if err != nil {
log.Fatal(err)
}
}
func main() {
srcFile := "D:\\Go\\web2\\test.png"
destFile := srcFile[strings.LastIndex(srcFile, "\\")+1:]
fmt.Println(destFile)
tempFile := destFile + "temp.txt"
fmt.Println(tempFile)
file1, err := os.Open(srcFile)
HandleErr(err)
file2, err := os.OpenFile(destFile, os.O_CREATE|os.O_WRONLY, os.ModePerm)
HandleErr(err)
file3, err := os.OpenFile(tempFile, os.O_CREATE|os.O_RDWR, os.ModePerm)
HandleErr(err)
defer file1.Close()
defer file2.Close()
file3.Seek(0, io.SeekStart)
bs := make([]byte, 100, 100)
n1, err := file3.Read(bs)
countStr := string(bs[:n1])
fmt.Println("countstr: ", countStr)
count, err := strconv.ParseInt(countStr, 10, 64)
fmt.Println("count: ", count)
file1.Seek(count, io.SeekStart)
file2.Seek(count, io.SeekStart)
data := make([]byte, 1024, 1024)
n2 := -1
n3 := -1
total := int(count)
for {
n2, err = file1.Read(data)
if err == io.EOF || n2 == 0 {
fmt.Println("文件复制完毕。。", total)
file3.Close()
os.Remove(tempFile)
break
}
n3, err = file2.Write(data[:n2])
total += n3
file3.Seek(0, io.SeekStart)
file3.WriteString(strconv.Itoa(total))
fmt.Printf("total:%d\n", total)
if total > 8000 {
panic("假装断电了。。。")
}
}
}