美文网首页
golang copy

golang copy

作者: 司空儿 | 来源:发表于2020-11-13 16:05 被阅读0次
    package main
    
    import (
    
        "fmt"
    
        "io"
    
        "os"
    
        "path/filepath"
    
        "strconv"
    
    )
    
    var BUFFERSIZE int64
    
    func Copy1(src, dst string, BUFFERSIZE int64) error {
    
        sourceFileStat, err := os.Stat(src)
    
        if err != nil {
    
            return err
    
        }
    
        if !sourceFileStat.Mode().IsRegular() {
    
            return fmt.Errorf("%s is not a regular file", src)
    
        }
    
        source, err := os.Open(src)
    
        if err != nil {
    
            return err
    
        }
    
        defer source.Close()
    
        _, err = os.Stat(dst)
    
        if err == nil {
    
            return fmt.Errorf("file %s already exists", dst)
    
        }
    
        destination, err := os.Create(dst)
    
        if err != nil {
    
            return err
    
        }
    
        defer destination.Close()
    
        if err != nil {
    
            panic(err)
    
        }
    
        buf := make([]byte, BUFFERSIZE)
    
        for {
    
            n, err := source.Read(buf)
    
            if err != nil && err != io.EOF {
    
                return err
    
            }
    
            if n == 0 {
    
                break
    
            }
    
            if _, err := destination.Write(buf[:n]); err != nil {
    
                return err
    
            }
    
        }
    
        return err
    
    }
    
    func Copy(src, dst string) (int64, error) {
    
        sourceFileStat, err := os.Stat(src)
    
        if err != nil {
    
            return 0, err
    
        }
    
        if !sourceFileStat.Mode().IsRegular() {
    
            return 0, fmt.Errorf("%s is not a regular file", src)
    
        }
    
        source, err := os.Open(src)
    
        if err != nil {
    
                return 0, err
    
        }
    
        defer source.Close()
    
        destination, err := os.Create(dst)
    
        if err != nil {
    
            return 0, err
    
        }
    
        defer destination.Close()
    
        nBytes, err := io.Copy(destination, source)
    
        return nBytes, err
    
    }
    
    func main() {
    
        if len(os.Args) != 4 {
    
            fmt.Printf("usage: %s source destination BUFFERSIZE\n",
    
                filepath.Base(os.Args[0]))
    
            os.Exit(1)
    
        }
    
        source := os.Args[1]
    
        destination := os.Args[2]
    
        BUFFERSIZE, _ = strconv.ParseInt(os.Args[3], 10, 64)
    
        fmt.Printf("Copying %s to %s\n", source, destination)
    
        err := Copy1(source, destination, BUFFERSIZE)
    
        if err != nil {
    
            fmt.Printf("File copying failed: %q\n", err)
    
        }
    
    }
    
    
    作者:holdtom
    链接:https://www.imooc.com/article/271446
    来源:慕课网
    

    相关文章

      网友评论

          本文标题:golang copy

          本文链接:https://www.haomeiwen.com/subject/scxbbktx.html