golang實現(xiàn)文件拷貝的2種方式

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

文章題目:golang實現(xiàn)文件拷貝的2種方式
標題路徑:http://bm7419.com/article4/jdecie.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供標簽優(yōu)化、靜態(tài)網站、網站營銷、網站改版、App開發(fā)軟件開發(fā)

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

網站建設網站維護公司