IDEA2023.1.3破解,IDEA破解,IDEA 2023.1破解,最新IDEA激活码

Go语言复制文件

IDEA2023.1.3破解,IDEA破解,IDEA 2023.1破解,最新IDEA激活码

在使用Go开发项目的过程中,有时我们需要做一些复制文件的功能,我们可以把它封装成一个函数,在以后每次需要用到该功能的时候直接调用封装的函数即可。

如果是大文件,我们可以使用os包,使用os.Open()os.Create()都可以获取到文件句柄(文件指针),然后通过文件句柄(文件指针)的Read()Write()方法,按照字节读取和写入来实现复制文件的功能

对于大文件,我们可以采用下面的方式

package main

import (
    "io"
    "log"
    "os"
)

func CopyFile(srcFileName string, dstFileName string) {
    //打开源文件
    srcFile, err := os.Open(srcFileName)
    if err != nil {
        log.Fatalf("源文件读取失败,原因是:%v\n", err)
    }
    defer func() {
        err = srcFile.Close()
        if err != nil {
            log.Fatalf("源文件关闭失败,原因是:%v\n", err)
        }
    }()

    //创建目标文件,稍后会向这个目标文件写入拷贝内容
    distFile, err := os.Create(dstFileName)
    if err != nil {
        log.Fatalf("目标文件创建失败,原因是:%v\n", err)
    }
    defer func() {
        err = distFile.Close()
        if err != nil {
            log.Fatalf("目标文件关闭失败,原因是:%v\n", err)
        }
    }()
    //定义指定长度的字节切片,每次最多读取指定长度
    var tmp = make([]byte, 1024*4)
    //循环读取并写入
    for {
        n, err := srcFile.Read(tmp)
        n, _ = distFile.Write(tmp[:n])
        if err != nil {
            if err == io.EOF {//读到了文件末尾,并且写入完毕,任务完成返回(关闭文件的操作由defer来完成)
                return
            } else {
                log.Fatalf("拷贝过程中发生错误,错误原因为:%v\n", err)
            }
        }
    }
}

func main() {
    CopyFile("./worm.mp4", "./dist.mp4")
}

使用io包的Copy方法也能实现文件复制功能

package main

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

//自己编写一个函数,接收两个文件路径 srcFileName dstFileName
func CopyFile(dstFileName string, srcFileName string) (written int64, err error) {

    srcFile, err := os.Open(srcFileName)

    if err != nil {
        fmt.Printf("open file err = %v\n", err)
        return
    }

    defer srcFile.Close()

    //打开dstFileName

    dstFile, err := os.OpenFile(dstFileName, os.O_WRONLY | os.O_CREATE, 0755)
    if err != nil {
        fmt.Printf("open file err = %v\n", err)
        return
    }

    defer dstFile.Close()

    return io.Copy(dstFile, srcFile)

}

func main() {

    result, err := CopyFile("./src/main/dst.png", "./src/main/file.png")

    if err == nil {
        fmt.Println("拷贝成功!,拷贝的字节数为: ", result)
    }
}

还可以使用下面的方法

package main

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

//自己编写一个函数,接收两个文件路径 srcFileName dstFileName

func CopyFile(dstFileName string, srcFileName string) (written int64, err error) {

    srcFile, err := os.Open(srcFileName)

    if err != nil {
        fmt.Printf("open file err = %v\n", err)
        return
    }

    defer srcFile.Close()

    //通过srcFile,获取到Reader
    reader := bufio.NewReader(srcFile)

    //打开dstFileName
    dstFile, err := os.OpenFile(dstFileName, os.O_WRONLY | os.O_CREATE, 0666)
    if err != nil {
        fmt.Printf("open file err = %v\n", err)
        return
    }

    writer := bufio.NewWriter(dstFile)
    defer func() {
        writer.Flush() //把缓冲区的内容写入到文件
        dstFile.Close()

    }()

    return io.Copy(writer, reader)

}

func main() {

    result, err := CopyFile("./src/main/dst.png", "./src/main/file.png")

    if err == nil {
        fmt.Println("拷贝成功!拷贝的字节大写为: ", result)
    }
}


文章永久链接:https://tech.souyunku.com/?p=33299


Warning: A non-numeric value encountered in /data/wangzhan/tech.souyunku.com.wp/wp-content/themes/dux/functions-theme.php on line 1154
赞(83) 打赏



未经允许不得转载:搜云库技术团队 » Go语言复制文件

IDEA2023.1.3破解,IDEA破解,IDEA 2023.1破解,最新IDEA激活码
IDEA2023.1.3破解,IDEA破解,IDEA 2023.1破解,最新IDEA激活码

评论 抢沙发

大前端WP主题 更专业 更方便

联系我们联系我们

觉得文章有用就打赏一下文章作者

微信扫一扫打赏

微信扫一扫打赏


Fatal error: Uncaught Exception: Cache directory not writable. Comet Cache needs this directory please: `/data/wangzhan/tech.souyunku.com.wp/wp-content/cache/comet-cache/cache/https/tech-souyunku-com/index.q`. Set permissions to `755` or higher; `777` might be needed in some cases. in /data/wangzhan/tech.souyunku.com.wp/wp-content/plugins/comet-cache/src/includes/traits/Ac/ObUtils.php:367 Stack trace: #0 [internal function]: WebSharks\CometCache\Classes\AdvancedCache->outputBufferCallbackHandler() #1 /data/wangzhan/tech.souyunku.com.wp/wp-includes/functions.php(5109): ob_end_flush() #2 /data/wangzhan/tech.souyunku.com.wp/wp-includes/class-wp-hook.php(303): wp_ob_end_flush_all() #3 /data/wangzhan/tech.souyunku.com.wp/wp-includes/class-wp-hook.php(327): WP_Hook->apply_filters() #4 /data/wangzhan/tech.souyunku.com.wp/wp-includes/plugin.php(470): WP_Hook->do_action() #5 /data/wangzhan/tech.souyunku.com.wp/wp-includes/load.php(1097): do_action() #6 [internal function]: shutdown_action_hook() #7 {main} thrown in /data/wangzhan/tech.souyunku.com.wp/wp-content/plugins/comet-cache/src/includes/traits/Ac/ObUtils.php on line 367