• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

94_Go基础_1_62断点续传

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
 1 package main
 2 
 3 import (
 4     "fmt"
 5     "io"
 6     "log"
 7     "os"
 8     "strconv"
 9     "strings"
10 )
11 
12 func HandleErr(err error) {
13     if err != nil {
14         log.Fatal(err)
15     }
16 }
17 
18 func main() {
19     /*
20         断点续传:
21             文件传递:文件复制
22 
23             "D:\\Go\\web2\\test.png"
24 
25             复制到当前的工程下:
26 
27         思路:边复制,边记录复制的总量
28 
29     */
30 
31     srcFile := "D:\\Go\\web2\\test.png"
32     destFile := srcFile[strings.LastIndex(srcFile, "\\")+1:]
33     fmt.Println(destFile) // test.png
34 
35     tempFile := destFile + "temp.txt"
36     fmt.Println(tempFile) // test.pngtemp.txt
37 
38     file1, err := os.Open(srcFile)
39     HandleErr(err)
40     file2, err := os.OpenFile(destFile, os.O_CREATE|os.O_WRONLY, os.ModePerm)
41     HandleErr(err)
42     file3, err := os.OpenFile(tempFile, os.O_CREATE|os.O_RDWR, os.ModePerm)
43     HandleErr(err)
44 
45     defer file1.Close()
46     defer file2.Close()
47 
48     // step1:先读取临时文件中的数据,再seek
49     file3.Seek(0, io.SeekStart)
50     bs := make([]byte, 100, 100)
51     n1, err := file3.Read(bs)
52     // HandleErr(err)
53     countStr := string(bs[:n1])
54     fmt.Println("countstr: ", countStr)
55     count, err := strconv.ParseInt(countStr, 10, 64)
56     // HandleErr(err)
57     fmt.Println("count: ", count)
58 
59     //step2:设置读,写的位置:
60     file1.Seek(count, io.SeekStart)
61     file2.Seek(count, io.SeekStart)
62     data := make([]byte, 1024, 1024)
63     n2 := -1            // 读取的数据量
64     n3 := -1            // 写入的数据量
65     total := int(count) // 读取的总量
66 
67     //step3:复制文件
68     for {
69         n2, err = file1.Read(data)
70         if err == io.EOF || n2 == 0 {
71             fmt.Println("文件复制完毕。。", total)
72             file3.Close()
73             os.Remove(tempFile)
74             break
75         }
76         n3, err = file2.Write(data[:n2])
77         total += n3
78 
79         // 将复制的总量,存储到临时文件中
80         file3.Seek(0, io.SeekStart)
81         file3.WriteString(strconv.Itoa(total))
82 
83         fmt.Printf("total:%d\n", total)
84 
85         // 假装断电
86         if total > 8000 {
87             panic("假装断电了。。。")
88         }
89 
90     }
91 
92 }

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
go 接口以及对象的使用发布时间:2022-07-10
下一篇:
Go单元测试(一):基本用法发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap