GO文件读写03---使用缓冲读写实现视频文件的拷贝

package main

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

/*
·使用缓冲读写实现视频文件的拷贝;
*/

func main() {
	//报路径参数错误时【file name,directory name,or volumn label syntax is incorrect】,手动重写一下路径

	/*打开源文件和目标文件*/
	srcFile, err1 := os.Open("文件读写.wmv")
	dstFile, err2 := os.OpenFile("撸码痴汉.avi", os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0666)
	if err1!=nil || err2!=nil {
		fmt.Println("open failed,err=",err1,err2)
		return
	}

	/*最终关闭源文件和目标文件*/
	defer func() {
		srcFile.Close()
		dstFile.Close()
	}()


	//创建源文件的读取器
	reader := bufio.NewReader(srcFile)
	//创建目标文件的写出器
	writer := bufio.NewWriter(dstFile)

	//创建1K大小的缓冲区(读到的数据先丢入该“桶”,再将该桶中的数据倒入目标文件)
	buffer := make([]byte, 1024)

	for  {
		//从源文件中读取一桶数据
		n, err := reader.Read(buffer)

		if err != nil{
			//读到文件末尾时退出读写循环
			if err == io.EOF{
				fmt.Println("已到文件末尾")
				break
			}
			fmt.Println("读取失败,err=",err)
		}else{
			fmt.Printf("成功读取%d个字节\n",n)
			//fmt.Println(buffer)

			//将桶中的数据写出到目标文件
			writer.Write(buffer)
		}
	}

	//将系统缓存中的内容一次性注入到文件(清空缓存)
	writer.Flush()

	fmt.Println("copy ok!")
}

  

猜你喜欢

转载自www.cnblogs.com/yunweiqiang/p/11964110.html