Golang学习日志 ━━ 实现的几种方式
//纯粹以手动读写方式实现copy功能
func copyFilebyRW() {
fmt.Println("========拷贝文件============")
c1, err := ioutil.ReadFile("./")
if err != nil {
fmt.Println("读取错误")
}
err = ioutil.WriteFile("./", c1, 6044)
if err != nil {
fmt.Println("录入失败")
}
}
//读取,copy到write中
func copyFileOStoOS() {
srcFile, err := os.Open("./")
defer srcFile.Close()
if err != nil {
fmt.Println("srcfile获取失败")
return
}
dstFile, err := os.OpenFile("./", os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0644)
defer dstFile.Close()
if err != nil {
fmt.Println("dstfile获取失败")
return
}
rtn, err := io.Copy(dstFile, srcFile)
if err != nil {
fmt.Println("copy失败")
}
fmt.Println("copy结束:", rtn)
}
//读取缓冲,copy到不缓冲write中
func copyFileBufftoOS() {
srcFile, err := os.Open("./")
defer srcFile.Close()
if err != nil {
fmt.Println("srcfile获取失败")
return
}
srcBuf := bufio.NewReader(srcFile)
dstFile, err := os.OpenFile("./", os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0644)
defer dstFile.Close()
if err != nil {
fmt.Println("dstfile获取失败")
return
}
rtn, err := io.Copy(dstFile, srcBuf)
if err != nil {
fmt.Println("copy失败")
}
fmt.Println("copy结束:", rtn)
}
//读取,copy到缓冲write中
func copyFileOStoBuff() {
srcFile, err := os.Open("./")
defer srcFile.Close()
if err != nil {
fmt.Println("srcfile获取失败")
return
}
dstFile, err := os.OpenFile("./", os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0644)
defer dstFile.Close()
if err != nil {
fmt.Println("dstfile获取失败")
return
}
dstBuf := bufio.NewWriter(dstFile)
rtn, err := io.Copy(dstBuf, srcFile)
if err != nil {
fmt.Println("copy失败")
}
// 进入缓冲后输出,这步骤非常重要,否则虽然read成功了,但write文件为空
dstBuf.Flush()
fmt.Println("copy结束:", rtn)
}
//读取缓冲,copy到缓冲write中
func copyFileBufftoBuff() {
srcFile, err := os.Open("./")
defer srcFile.Close()
if err != nil {
fmt.Println("srcfile获取失败")
return
}
srcBuf := bufio.NewReader(srcFile)
dstFile, err := os.OpenFile("./", os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0644)
defer dstFile.Close()
if err != nil {
fmt.Println("dstfile获取失败")
return
}
dstBuf := bufio.NewWriter(dstFile)
rtn, err := io.Copy(dstBuf, srcBuf)
if err != nil {
fmt.Println("copy失败")
}
// 进入缓冲后输出,这步骤非常重要,否则虽然read成功了,但write文件为空
dstBuf.Flush()
fmt.Println("copy结束:", rtn)
}