前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【和博主一起去浪(golang)吧】文件操作详解(三)——简易文件拷贝和缓冲式文件拷贝

【和博主一起去浪(golang)吧】文件操作详解(三)——简易文件拷贝和缓冲式文件拷贝

作者头像
Regan Yue
发布2021-09-16 11:27:07
2260
发布2021-09-16 11:27:07
举报
文章被收录于专栏:ReganYue's BlogReganYue's Blog

简易的文件拷贝

代码语言:javascript
复制
package main

import (
	"fmt"
	"io"
	"os"
)

func main() {
	srcFile, _ := os.OpenFile("C:\\\\Users\\\\11316\\\\Desktop\\\\test.txt",os.O_RDONLY,0666)
	dstFile, _ := os.OpenFile("C:\\\\Users\\\\11316\\\\Desktop\\\\test1.txt",os.O_CREATE|os.O_WRONLY,0666)
	written, err := io.Copy(dstFile, srcFile)
	if err == nil{
		fmt.Println("拷贝成功,字节数=",written)
	}else {
		fmt.Println("拷贝失败,err=",err)
	}
}

升级版:缓冲式文件拷贝

当遇到大文件时第一种方法不在适用,需要用到本方法。

代码语言:javascript
复制
package main

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

func main() {
	//打开源文件
	srcfile, _ := os.OpenFile("C:\\\\Users\\\\11316\\\\Desktop\\\\rice.png", os.O_RDONLY, 0666)
	//	打开目标文件
	dstfile, _ := os.OpenFile("C:\\\\Users\\\\11316\\\\Desktop\\\\test11.png", os.O_CREATE|os.O_WRONLY, 0666)
	defer func() {
		srcfile.Close()
		dstfile.Close()
		fmt.Println("文件已关闭")
	}()

	reader := bufio.NewReader(srcfile)
	writer := bufio.NewWriter(dstfile)
	buffer := make([]byte, 1024)
	for{
		_ , err := reader.Read(buffer)
		if err != nil{
			if err == io.EOF{
				fmt.Println("源文件读取完毕")
				break
			}else {
				fmt.Println("error")
				return
			}
		}else {
			_, err1 := writer.Write(buffer)
			if err1 != nil{
				fmt.Println(err1)
				return
			}
		}

	}
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-03-08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简易的文件拷贝
  • 升级版:缓冲式文件拷贝
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档