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) }
希望本文所述对大家的Go语言程序设计有所帮助。