当前位置:网站首页>Go three ways to copy files

Go three ways to copy files

2022-04-23 19:21:00 Handsome that handsome

Method 1 :io Under bag Read() and Write() Method realization

We can go through io Under bag Read() and Write() Method , Reading while writing , You can copy files . This method is to read the file by block , The size of the block will also affect the performance of the program

The function of this function : Copy files , The return value is the total number of copies ( byte ), error

func copyFile1(srcFile,destFile string)(int,error){
    
	file1,err:=os.Open(srcFile)
	if err != nil{
    
		return 0,err
	}
	file2,err:=os.OpenFile(destFile,os.O_WRONLY|os.O_CREATE,os.ModePerm)
	if err !=nil{
    
		return 0,err
	}
	defer file1.Close()
	defer file2.Close()
	// Copy the data 
	bs := make([]byte,1024,1024)
	n :=-1// Amount of data read 
	total := 0
	for {
    
		n,err = file1.Read(bs)
		if err == io.EOF || n == 0{
    
			fmt.Println(" Copy complete ..")
			break
		}else if err !=nil{
    
			fmt.Println(" Wrong report ...")
			return total,err
		}
		total += n
		file2.Write(bs[:n])
	}
	return total,nil

}

Method 2 :io Under bag Copy() Method realization

We can also use io Under bag Copy() Method .

The sample code is as follows :

func copyFile2(srcFile, destFile string)(int64,error){
    
	file1,err:=os.Open(srcFile)
	if err != nil{
    
		return 0,err
	}
	file2,err:=os.OpenFile(destFile,os.O_WRONLY|os.O_CREATE,os.ModePerm)
	if err !=nil{
    
		return 0,err
	}
	defer file1.Close()
	defer file2.Close()

	return io.Copy(file2,file1)
}

Method 3. ioutil Under bag ReadFile() and WriteFile() Method realization

func CopyFile2(srcFile, destFile string) (int, error) {
    
	// Read all data in the target file at one time 
	content, err := ioutil.ReadFile(srcFile)
	if err != nil {
    
		fmt.Println("err:", err)
		return 0, err
	}
	// Write the data in the target file to the specified file 
	err = ioutil.WriteFile(destFile, content, os.ModePerm)
	if err != nil {
    
		fmt.Println("err:", err)
		return 0, err
	}
	return len(content),nil

}

版权声明
本文为[Handsome that handsome]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/04/202204210557451159.html