Golang学习日志 ━━ 使用bufio方法拷贝文件将导致mov视频文件出错

本文探讨了使用Golang进行文件复制时,不同方法对MOV视频文件的影响。直接使用io.Copy进行复制能避免错误,而通过bufio方法复制则可能导致MOV文件在Windows10系统下无法正常播放或生成缩略图的问题。

分别使用和不使用buff来复制文件,将可能造成mov视频文件有不知名错误。

以下为一般的拷贝并删除方法,拷贝后的文件没有错误。

func CutFileCom(srcFilePath string, dstFilePath string) error {
	srcFile, err := os.Open(srcFilePath)
	if err != nil {
		fmt.Printf("打开源文件错误,错误信息=%v\n", err)
		return err
	}
	//defer srcFile.Close()

	dstFile, err := os.OpenFile(dstFilePath, os.O_WRONLY|os.O_CREATE, 0777)
	if err != nil {
		fmt.Printf("打开目标文件错误,错误信息=%v\n", err)
		return err
	}

	defer dstFile.Close()
	_, err = io.Copy(dstFile, srcFile)
	if err != nil {
		fmt.Printf("复制目标文件错误,错误信息=%v\n", err)
		return err
	}

	//删除
	srcFile.Close()
	err = os.Remove(srcFilePath)
	if err != nil {
		fmt.Printf("删除目标文件错误,错误信息=%v\n", err)
		return err
	}

	err = nil
	return err
}

以下为使用bufio方法复制并删除文件,其它文件暂未发现有什么问题,主要是mov视频文件用此方法拷贝后将无法使用windows10自带播放器播放,会提示出错,也不会生成缩略图;只能使用potplayer打开。

func CutFileBufio(srcFilePath string, dstFilePath string) error {
	srcFile, err := os.Open(srcFilePath)
	if err != nil {
		fmt.Printf("打开源文件错误,错误信息=%v\n", err)
		return err
	}
	reader := bufio.NewReader(srcFile)

	dstFile, err := os.OpenFile(dstFilePath, os.O_WRONLY|os.O_CREATE, 0777)
	if err != nil {
		fmt.Printf("打开目标文件错误,错误信息=%v\n", err)
		return err
	}
	writer := bufio.NewWriter(dstFile)
	defer dstFile.Close()
	_, err = io.Copy(writer, reader)
	if err != nil {
		fmt.Printf("复制目标文件错误,错误信息=%v\n", err)
		return err
	}

	//删除
	srcFile.Close()
	err = os.Remove(srcFilePath)
	if err != nil {
		fmt.Printf("删除目标文件错误,错误信息=%v\n", err)
		return err
	}

	err = nil
	return err
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值