go 实现文件拷贝的三种方法

package main

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

var (
	sourceFile = "E:/workspace/Goland/文件操作/mzd.jpg"
	desFile    = "E:/workspace/Goland/文件操作/mzx.jpg"
)

func main() {
	domeI()
	domeII()
	domeIII()

}
//3、运用bufio缓存区读写
func domeIII() {
	//1、打开文件流
	surFilPtr, _ := os.OpenFile(sourceFile, os.O_RDONLY, 0754)
	desFilPtr, _ := os.OpenFile(desFile, os.O_WRONLY|os.O_CREATE, 0754)
	//挂起关闭文件流
	defer surFilPtr.Close()
	defer desFilPtr.Close()
	//创建读入器、写出器
	reader := bufio.NewReader(surFilPtr)
	writer := bufio.NewWriter(desFilPtr)
	//创建一块8字节的缓存区
	buffer := make([]byte, 8)
	for {
		//将文件数据依次读进缓存区
		_, err := reader.Read(buffer)
		if err == io.EOF {
			fmt.Println("拷贝成功!")
			//倒出缓存区数据到目标文件
			writer.Flush()
			return
		}
		//把缓存区的数据依次写入缓存区
		writer.Write(buffer)
	}
}

//2、利用ioutil快速读写完成拷贝
func domeII() {
	bytes, _ := ioutil.ReadFile(sourceFile)
	err := ioutil.WriteFile(desFile, bytes, 0754)
	if err != nil {
		fmt.Println("拷贝失败!错误:", err)
		return
	}
	fmt.Println("拷贝成功!")
}

//1、	io.Copy() 系统自带
func domeI() {
	//1、打开文件流
	surFilPtr, _ := os.OpenFile(sourceFile, os.O_RDONLY, 0754)
	desFilPtr, _ := os.OpenFile(desFile, os.O_WRONLY|os.O_CREATE, 0754)
	//挂起关闭文件流
	defer surFilPtr.Close()
	defer desFilPtr.Close()
	//实行拷贝
	_, err := io.Copy(desFilPtr, surFilPtr)
	if err != nil {
		fmt.Println("拷贝失败!错误:", err)
		return
	}
	fmt.Println("拷贝成功!")
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值