Golang 复制文件的三种做法

主要介绍三种复制文件的方法:

  1. 使用io.Copy()方法
  2. 一次性读取输入文件,然后再一次性写入目标文件
  3. 使用buffer一块块地复制文件

方法一 : 使用io.Copy

func copy(src, dst string) (int64, error) {
   sourceFileStat, err := os.Stat(src)
   if err != nil {
      return 0, err
   }

   if !sourceFileStat.Mode().IsRegular() {
      return 0, fmt.Errorf("%s is not a regular file", src)
   }

   source, err := os.Open(src)
   if err != nil {
      return 0, err
   }
   defer source.Close()

   destination, err := os.Create(dst)
   if err != nil {
      return 0, err
   }

   defer destination.Close()
   nBytes, err := io.Copy(destination, source)
   return nBytes, err

这种方法虽然简单,但是缺少灵活性。如果文件太大,不是一种很好的方法。

方法二:使用ioutil.WriteFile()ioutil.ReadFile()

input, err := ioutil.ReadFile(sourceFile)
if err != nil {
   fmt.Println(err)
   return
}

err = ioutil.WriteFile(destinationFile, input, 0644)
if err != nil {
   fmt.Println("Error creating", destinationFile)
   fmt.Println(err)
   return
}

不是很高效的方法。

方法三:使用os.Read()os.Write()

buf := make([]byte, BUFFERSIZE)
for {
   n, err := source.Read(buf)
   if err != nil && err != io.EOF {
      return err
   }
   if n == 0 {
      break
   }

   if _, err := destination.Write(buf[:n]); err != nil {
      return err
   }
}

感谢作者:Wencha
查看原文:Golang 复制文件的三种做法

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 主要介绍三种复制文件的方法: 使用io.Copy()方法 一次性读取输入文件,然后再一次性写入目标文件 使用buf...
    Wenchao阅读 1,740评论 0 1
  • 参考Golang文件操作整理golang中的文件读写 一、API 参考Go语言学习笔记(五)文件操作 1.os.F...
    合肥黑阅读 15,546评论 0 8
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,136评论 1 32
  • io包中最重要的是两个接口:Reader和Writer Reader接口##### type Writer int...
    勿以浮沙筑高台阅读 16,319评论 0 5
  • 1、公司简况:主营产品,地域,股权结构,所属行业、概念 2、市场分析:销售金额,毛利,市场地位 3、财务分析:各季...
    村落时光阅读 543评论 0 0