go中拷贝文件操作

发布时间:2024年01月12日

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

// 拷贝文件内容到另一个文件里面
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("操作完成") // 操作完成提示
}

二. 判断文件是否存在

// 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
}

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

// 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 // 返回已写入字节数和可能发生的错误
}

四. 测试

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("执行完成")
}
文章来源:https://blog.csdn.net/qq_49195366/article/details/135554775
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。