Go 语言文件操作:拷贝文件
拷贝文件-文件读写操作
学习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成功
结尾
这里笔者只是给出简单的例子实现,具体一些问题可能没考虑很多
推荐文章: