青春纸盒子

文: 芦苇

你喜欢我笑的样子

我靠上了落寞的窗子

晚风吹起了我的袖子

明月沾湿了你的眸子


转身,你走出了两个人的圈子

树影婆娑,整座院子


挽起袖子

回头,把揽你忧伤一地的影子

装进,青春,这纸盒子


更多代码请关注我的微信小程序: "ecoder"

luwei0915

导航

94_Go基础_1_62 断点续传

 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 }

 

posted on 2021-12-08 14:37  芦苇の  阅读(29)  评论(0编辑  收藏  举报