1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
| func copyFile(dstName, srcName string) (n int, err error) {
// 以只读的方式打开原文件
src, err := os.Open(srcName)
if err != nil {
fmt.Println("Open Src File Failed err:", err)
return
}
// 将文件读取出来,写入临时的切片中
// 完整的元素的切片
var data []byte
// 每一次读取的元素,临时存储的切片
var temp = make([]byte, 128)
// 因为 temp 字节切片 有一定容量,一次读不完,所以可使用 for 循环读取
for {
n, err := src.Read(temp)
// 判断文件是否已经读取完, 用 io.EOF
if err == io.EOF {
break
}
if err != nil {
fmt.Println("Read src File Failed err:", err)
break
}
// 利用 append 函数 将临时切片读取到的内容 追加到完整切片中
data = append(data, temp[:n]...)
}
// 字节切片,打印的时候需要转换成 string 类型
defer src.Close()
// 以 写入|创建 的方式打开 目标文件
dst, err := os.OpenFile(dstName, os.O_WRONLY|os.O_CREATE, 0644)
if err != nil {
fmt.Println("Open Dst File Failed err:", err)
return
}
n, err = dst.Write(data)
if err != nil {
fmt.Println("Write Dst File Failed err:", err)
return
}
defer dst.Close()
fmt.Println("复制成功")
return
}
func main() {
n, err := copyFile("./xx.txt", "./temp.txt")
if err != nil {
fmt.Println("Copy File Failed err:", err)
return
}
fmt.Printf("复制了 %d 行\n", n)
}
|