分享
  1. 首页
  2. 文章

Golang实现文件拷贝功能

aside section ._1OhGeD · · 2299 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

今天学习了使用golang实现一个简单的文件拷贝功能, 可以拷贝一个文件,图片,视频或者音频,分享给正在学习go语言的朋友...

实现从E盘拷贝一个pdf 到 e:/Go/tools/目录下面
文件大小:25.5 M
srcFile := "e:/copyFileTest02.pdf" -- 源文件路径
dstFile := "e:/Go/tools/copyFileTest02.pdf" -- 目标文件路径

知识点总结

1, 使用了带缓存的 bufio.NewReader(srcFile) 和 bufio.NewWriter(dstFile),一边读一边写,这样支持拷贝较大的文件;
2,defer dstFile.Close() 切记使用defer 来关闭打开的文件,避免内存泄漏;
3,自己成功测试了copy一个word文件和pdf文件。

源代码参考

package main
import (
 "bufio"
 "fmt"
 "io"
 "os"
)
// 编写一个函数,接收两个文件路径:
func copyFile(dstFileName string, srcFileName string) (written int64, err error) {
 srcFile, err := os.Open(srcFileName)
 if err != nil {
 fmt.Printf("open file error = %v\n", err)
 }
 defer srcFile.Close()
 //通过srcFile,获取到READER
 reader := bufio.NewReader(srcFile)
 //打开dstFileName
 dstFile, err := os.OpenFile(dstFileName, os.O_WRONLY|os.O_CREATE, 0666)
 if err != nil {
 fmt.Printf("open file error = %v\n", err)
 return
 }
 //通过dstFile,获取到WRITER
 writer := bufio.NewWriter(dstFile)
 //writer.Flush()
 defer dstFile.Close()
 return io.Copy(writer, reader)
}
func main() {
 //调用copyFile完成文件拷贝
 srcFile := "e:/copyFileTest02.pdf"
 dstFile := "e:/Go/tools/copyFileTest02.pdf"
 _, err := copyFile(dstFile, srcFile)
 if err == nil {
 fmt.Println("拷贝文件正常...")
 } else {
 fmt.Printf("拷贝文件出错了... err =%v\n", err)
 }
}

备注说明

本文部分内容,图片,及视频来源于网络转载, 不以盈利为目的,不构成商业目的使用, 仅用于学习交流...相关版权归原作者所有。如有异议,请联系我 751749090@qq.com [麦特matt]
将在第一时间作出处理.


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:aside section ._1OhGeD

查看原文:Golang实现文件拷贝功能

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
2299 次点击
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏