开发者学堂课程【Go 语言核心编程 - 面向对象、文件、单元测试、反射、TCP 编程:拷贝文件(图片视频音频)】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/626/detail/9732
拷贝文件(图片视频音频)
内容介绍
一、 简介
二、 代码实现
一、 简介
文件编程应用实例:拷贝文件
说明:将一张图片/电影/mp3等二进制文件拷贝到另外一个文件e盘里,即e:/abc.jpg
打开手册,在io包里提供了一个copy手册:
func Copy(dst Writer, src Reader) (written int64, err error)。
将src拷贝到dst,如:flower.zip。
如果发生错误,就是一个error函数。
注意:Copy函数是io包提供的
二、 代码实现
先将前面的文件拷贝过来,写一个文件main.go:
package main
import
"fmt”
“io/ioutil"
func main() f
//将d:/flower.jpg文件拷贝到e:/abc .jpg
//自己编写一个函数,接收两个文件路径
srcFileName dstFileName func CopyFile
(dstFileName string, srcFileName string) (written int64, err error) [
os:open将其打开,这个就是原文件的句柄。
//信息输出
srcFile, err := os.Open(srcFileName)
if err != nil t
fmt.Printf("open file err=%v\n", err)
如果没有出错,把句柄就拿到了,此时可以构建writer
//通过srcfile,获取到 Reader
reader := bufio.NewReader(srcFile)
//打开dstFileName,文件路径可能不存在,所以不能用os打开,此时需要采用另外一种方式,即读、追加、写的方式打开。如果不存在就创建文件。
dstFile, err := os.OpenFile(dstFileName, Os.O_WRONLY Os.O_CREATE,0666)if err l= nil [
fmt.Printf("open file err=%v\n", err)
return
//有了文件句柄,就可以通过dstFile,获取到 Writer
writer := bufio.NewWriter(dstFile)
此时已经拿到Reader和Writer了,writer同目标文件关联起来,Reader同原文件关联起来。
//最后回到原来位置,分别关闭两个文件
defer srcFile.Close()
defer dstFile.close()
return io.Copy(writer, reader)
到此为止拷贝文件函数写完。
调用完成文件拷贝
Func main()
//将d:/flower.jpg 文件拷贝到 e:/abc.jpg
//调用CopyFile 完成文件拷贝srcFile:="d:/flower.jpg"
dstFile:="e:/abc.jpg"m
//判断有无错误
err := CopyFile(dstFile, srcFile)
if err == nil//此时说明没有错误
fmt.Printf("拷贝完成”)
) else
fmt.Printf("拷贝错误err=%v", err)//拷贝的错误信息
注意:
在这个位置下://自己编写一个函数,接收两个文件路径 srcFileName dstFileName,MP3或者电影,都可以完成拷贝,因为他们是二进制文件。
此时运行起来,运行结果如下:
发现问题,没有定义os,此时加入os:
package main
import
"fmt”
"os”
此时再次运行,因为此时使用的是待缓存的Reader和writer来完成的,需要再加入"bufio”
再次运行:
此时拷贝完成。此时在e盘的图片是可以的。同理,音频等也可以被拷贝。