package mainimport ( "fmt" "io" "os" "path/filepath" "strconv")var BUFFERSIZE int64func 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) }}
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦