go 语言文件操作:拷贝文件 | go 技术论坛-江南app体育官方入口
拷贝文件-文件读写操作
学习c语言时,有写过类似cp的程序,实现文件拷贝,按照以下步骤走
- 打开源文件
- 读取源文件内容
- 创建目标文件
- 将源文件的内容写到目标文件中去
- 关闭文件
1 使用上述步骤,实现文件拷贝
示例代码
func main() {
//需要有源文件路径,和目标文件路径
if len(os.args) != 3 {
panic("参数出错")
}
src := os.args[1] //源文件路径
dest := os.args[2] //目标文件路径
srcfilehandler, err := os.open(src)
checkerr(err)
defer srcfilehandler.close()
//获取源文件内容
filecontents, err := ioutil.readall(srcfilehandler)
checkerr(err)
//若dest存在.则不执行操作
_, err = os.stat(dest)
if nil == err {
fmt.println("您要执行拷贝的目标文件已存在,请更改目标文件路径")
return
}
//创建目标文件操作句柄
destfilehandler, err := os.create(dest)
checkerr(err)
defer destfilehandler.close()
_, err = destfilehandler.write(filecontents)
checkerr(err)
fmt.printf("将%s拷贝到%s成功\n", src, dest)
}
运行结果
ps d:\gopractice> go run .\filecopy\main.go .\filecopy\test.html .\filecopy\test.html.copy
将.\filecopy\test.html拷贝到.\filecopy\test.html.copy成功
2 使用io包
io包有提供拷贝的方法,且执行效率可能比我们自己写的要高
示例代码
func main() {
//需要有源文件路径,和目标文件路径
if len(os.args) != 3 {
panic("参数出错")
}
src := os.args[1] //源文件路径
dest := os.args[2] //目标文件路径
iocopy(src, dest)
fmt.printf("将%s拷贝到%s成功\n", src, dest)
}
func iocopy(src, dest string) {
srcfilehandler, err := os.open(src)
checkerr(err)
defer srcfilehandler.close()
//创建目标文件操作句柄
destfilehandler, err := os.create(dest)
checkerr(err)
defer destfilehandler.close()
_, err = io.copy(destfilehandler, srcfilehandler)
checkerr(err)
}
func checkerr(err error) {
if nil != err {
panic(err)
}
}
运行结果
#同上例
ps d:\gopractice> go run .\filecopy\main.go .\filecopy\test.html .\filecopy\test.html.copy
将.\filecopy\test.html拷贝到.\filecopy\test.html.copy成功
结尾
这里笔者只是给出简单的例子实现,具体一些问题可能没考虑很多