go語言基礎 文件拷貝 copy io包

io包下有個方法copy,拷貝文件這個比較複雜,go語言中有個更加簡單的方法,這個就瞭解下複製的過程就可以了

package main

import (
   "fmt"
   "os"
   "io"
)

func main()  {
   //destName:="C:\\Ruby\\aa.jpeg" //目標文件
   destName :="image\\bb.jpeg"
   srcName:="C:\\liu\\pro\\aa.jpeg"//源文件
   total, err:=copyFile2(destName, srcName)
   if err!=nil {
      fmt.Println("複製文件過程中產生錯誤,,",err)
   }else {
      fmt.Println("文件拷貝成功,總量是:",total)
   }
}
//實現文件的複製,返回值拷貝的數據總量,以及拷貝過程中產生的錯誤
func copyFile(destName,srcName string)(int,error){
   //1.打開源文件,讀取數據
   //2.打開目標文件,寫出數據
   srcFile, err:=os.Open(srcName)
   if err!=nil {
      return 0 ,err
   }
   defer srcFile.Close()
   destFile, err := os.OpenFile(destName,os.O_WRONLY|os.O_CREATE,0777)
   if err != nil{
      return 0, err
   }
   defer destFile.Close()
   //複製數據
   bs := make([] byte, 1024)
   count := 0//每次實際讀入數據量
   total :=0// 用於統計讀取的數據總量
   for{
      count,err = srcFile.Read(bs)
      if err!=nil && err !=io.EOF{ //EOF
         return total, err
      }else if err == io.EOF{
         fmt.Println("已經到達文件末尾。。")
         break
      }
      destFile.Write(bs[:count])
      total+=count
   }
   return total, nil

}


func copyFile2(destName, srcName string)(int64, error){
   srcFile ,err:= os.Open(srcName)
   if err!=nil{
      return 0, err
   }
   defer srcFile.Close()
   destFile,err:=os.OpenFile(destName,os.O_WRONLY|os.O_CREATE,0777)
   if err!=nil{
      return 0, err
   }
   defer destFile.Close()
   return io.Copy(destFile,srcFile)
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章