Golang 復(fù)制文件的三種做法

主要介紹三種復(fù)制文件的方法:

  1. 使用io.Copy()方法
  2. 一次性讀取輸入文件,然后再一次性寫(xiě)入目標(biāo)文件
  3. 使用buffer一塊塊地復(fù)制文件

方法一 : 使用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

這種方法雖然簡(jiǎn)單,但是缺少靈活性。如果文件太大,不是一種很好的方法。

方法二:使用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
   }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容