一. 拷贝文件内容到另一个文件位置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// 拷贝文件内容到另一个文件里面
func copyContent() {
filepath1 := "d:/abc.txt"
filepath2 := "e:/eee.txt"

// 读取内容
data, err := os.ReadFile(filepath1) // 使用os.ReadFile函数读取指定路径的文件内容
if err != nil {
fmt.Println("read file wrong:", err) // 若读取文件出错,则打印错误信息
return
}
fmt.Println("读取数据是:", string(data)) // 打印读取到的数据(转换为字符串形式)

// 写入内容
err = os.WriteFile(filepath2, data, 0666) // 使用os.WriteFile函数将指定路径的文件写入内容
if err != nil {
fmt.Println("write file wrong:", err) // 若写入文件出错,则打印错误信息
return
}
fmt.Println("操作完成") // 操作完成提示
}

二. 判断文件是否存在

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
// PathExists 函数接受一个文件路径并返回两个值:一个布尔值和一个错误。
// 它用于判断指定路径的文件或目录是否存在。
func PathExists(filepath string) (bool, error) {
// 使用 os.Stat 函数获取文件或目录的状态信息。
// os.Stat 返回两个值:一个 FileInfo 类型的 fileInfo 和一个错误值 err。
// 如果文件不存在,os.Stat 将返回一个错误。
fileInfo, err := os.Stat(filepath)

// 打印 fileInfo 和 err 的值。
fmt.Println(fileInfo, err)

// 如果 err 为 nil,表示没有错误发生,文件或目录存在。
// 在这种情况下,函数返回 true 和 nil(表示没有错误)。
if err == nil {
return true, nil
}

// 使用 os.IsNotExist 函数检查错误是否因为文件或目录不存在。
// 如果是因为文件或目录不存在而出错,os.IsNotExist 将返回 true。
// 在这种情况下,函数返回 false 和 nil(表示没有错误,只是文件不存在)。
if os.IsNotExist(err) {
return false, nil
}

// 如果出现了其他类型的错误(不是文件不存在的错误),
// 函数返回 false 和实际发生的错误。
return false, err
}

三. 拷贝文件(图片、视频)

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
// CopyFile 函数用于拷贝一个文件到另一个文件
func CopyFile(distFileName string, srcFileName string) (written int64, err error) {
// 打开源文件
// os.Open 方法打开指定路径的源文件
file, err := os.Open(srcFileName)
if err != nil {
// 如果出现错误,打印错误信息并继续执行
fmt.Println("open source file error:", err)
}
// 创建一个读取器,从源文件中读取内容
reader := bufio.NewReader(file)

// 打开目标文件,模式为写入并创建(如果不存在),权限为 666
disFile, err := os.OpenFile(distFileName, os.O_WRONLY|os.O_CREATE, 0666)
if err != nil {
// 如果出现错误,打印错误信息并返回
fmt.Println("open destination file error:", err)
return
}
// 创建一个写入器,向目标文件写入内容
writer := bufio.NewWriter(disFile)

// 使用 io.Copy 方法将源文件的内容复制到目标文件中
written, err = io.Copy(writer, reader)

return // 返回已写入字节数和可能发生的错误
}

四. 测试

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
package main

import (
"bufio"
"fmt"
"io"
"os"
)

func main() {
//copyContent()
//println(PathExists(filepath1))
dis := "e:/666.png"
src := "c:/users/coderyeah/desktop/welt.jpg"

written, err := CopyFile(dis, src)
if err != nil {
fmt.Println(err)
return
}

fmt.Println("copy字节数:", written)

fmt.Println("执行完成")
}