GOLANG实现的一个cp函数,可带-f -v参数

GOLANG实现的一个cp dst src 函数,可带-f -v参数。如果不带-f参数,而且dst file 存在,则提示是否overwrite dst file,根据输入作相应动作;带-f,则不询问,直接overwrite已经存在的dst file. -v参数打印出一些提示。

package main

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

var (
	showProcess bool
	forceCp     bool
)

func init() {
	flag.BoolVar(&showProcess, "v", false, "show copy msg")
	flag.BoolVar(&forceCp, "f", false, "false to cp")
	flag.Parse()
}

func main() {
	if flag.NArg() < 2 {
		flag.Usage()
		fmt.Println("error: Need dst  and src file!!")
		return
	}

	CopyFile(flag.Arg(0), flag.Arg(1))

}

func fileExist(filename string) bool {
	_, err := os.Stat(filename)
	return err == nil || os.IsExist(err)
}
func copyActioin(dst, src string) (w int64, err error) {
	var (
		srcFile *os.File
		dstFile *os.File
	)
	srcFile, err = os.Open(src)
	if err != nil {
		fmt.Println(err.Error())
		return
	}
	defer srcFile.Close()

	dstFile, err = os.Create(dst)
	if err != nil {
		fmt.Println(err.Error())
		return
	}
	defer dstFile.Close()

	return io.Copy(dstFile, srcFile)

}
func CopyFile(dst, src string) {
	if !forceCp {
		if fileExist(dst) {
			fmt.Printf("%s existed overwrite?[y/n]", dst)
			reader := bufio.NewReader(os.Stdin)
			data, _, _ := reader.ReadLine()
			if strings.ToLower(strings.TrimSpace(string(data)))[0] != 'y' {
				return
			}
		}
	}
	copyActioin(dst, src)
	if showProcess {
		fmt.Printf("%s =====>> %s", src, dst)
	}
}

测试:

F:\godownload\src\awesomeProject>example_io.exe backup.go example_io.og
open example_io.og: The system cannot find the file specified.

F:\godownload\src\awesomeProject>example_io.exe backup.go example_io.go

F:\godownload\src\awesomeProject>example_io.exe backup.go example_io.go
backup.go existed overwrite?[y/n]y

F:\godownload\src\awesomeProject>example_io.exe backup.go example_io.go
backup.go existed overwrite?[y/n]n

F:\godownload\src\awesomeProject>example_io.exe -v backup.go example_io.go
backup.go existed overwrite?[y/n]y
example_io.go =====>> backup.go
F:\godownload\src\awesomeProject>example_io.exe -v -f backup.go example_io.go
example_io.go =====>> backup.go
F:\godownload\src\awesomeProject>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值