go语言实现文件分割的方法
本文实例讲述了go语言实现文件分割的方法。分享给大家供大家参考。具体实现方法如下:
import(
// "bufio"
"flag"
"fmt"
"io"
"os"
)
import"strconv"
varinfile*string=flag.String("f","Null","pleaseinputafilenameordir.")
varsize*string=flag.String("s","0","pleaseinputadstfilesize.")
//funcdataCopy(file*os.File,file*os.File)
funcSplitFile(file*os.File,sizeint){
finfo,err:=file.Stat()
iferr!=nil{
fmt.Println("getfileinfofailed:",file,size)
}
fmt.Println(finfo,size)
//每次最多拷贝1m
bufsize:=1024*1024
ifsize<bufsize{
bufsize=size
}
buf:=make([]byte,bufsize)
num:=(int(finfo.Size())+size-1)/size
fmt.Println(num,len(buf))
fori:=0;i<num;i++{
copylen:=0
newfilename:=finfo.Name()+strconv.Itoa(i)
newfile,err1:=os.Create(newfilename)
iferr1!=nil{
fmt.Println("failedtocreatefile",newfilename)
}else{
fmt.Println("createfile:",newfilename)
}
forcopylen<size{
n,err2:=file.Read(buf)
iferr2!=nil&&err2!=io.EOF{
fmt.Println(err2,"failedtoreadfrom:",file)
break
}
ifn<=0{
break
}
//fmt.Println(n,len(buf))
//写文件
w_buf:=buf[:n]
newfile.Write(w_buf)
copylen+=n
}
}
return } funcmain(){ flag.Parse() if*infile=="Null"{ fmt.Println("nofiletoinput") return } file,err:=os.Open(*infile) iferr!=nil{ fmt.Println("failedtoopen:",*infile) } deferfile.Close() size,_:=strconv.Atoi(*size) SplitFile(file,size*1024) }