码迷,mamicode.com
首页 > 其他好文 > 详细

golang 实现文件拷贝的2种方式

时间:2018-01-25 00:34:31      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:reg   amp   src   open   sage   nil   pac   func   create   

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 实现文件拷贝的2种方式

标签:reg   amp   src   open   sage   nil   pac   func   create   

原文地址:http://blog.51cto.com/xwandrew/2064824

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!