加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

go语言实现文件分割的方法

发布时间:2020-12-16 19:32:34 所属栏目:大数据 来源:网络整理
导读:本篇章节讲解go语言实现文件分割的方法。供大家参考研究。具体实现方法如下: 复制代码 代码如下: import ( //"bufio" "flag" "fmt" "io" "os" ) import "strconv" var infile *string = flag.String("f","Null","please input a file name or dir."

本篇章节讲解go语言实现文件分割的方法。分享给大家供大家参考。具体实现方法如下:

复制代码 代码如下:
import (
 // "bufio"
 "flag"
 "fmt"
 "io"
 "os"
)
import "strconv"
var infile *string = flag.String("f","Null","please input a file name or dir.")
var size *string = flag.String("s","0","please input a dst file size.")
//func dataCopy(file *os.File,file *os.File)
func SplitFile(file *os.File,size int) {
 finfo,err := file.Stat()
 if err != nil {
  fmt.Println("get file info failed:",file,size)
 }
 fmt.Println(finfo,size)
 //每次最多拷贝1m
 bufsize := 1024 * 1024
 if size < bufsize {
  bufsize = size
 }
 buf := make([]byte,bufsize)
 num := (int(finfo.Size()) + size - 1) / size
 fmt.Println(num,len(buf))
 for i := 0; i < num; i++ {
  copylen := 0
  newfilename := finfo.Name() + strconv.Itoa(i)
  newfile,err1 := os.Create(newfilename)
  if err1 != nil {
   fmt.Println("failed to create file",newfilename)
  } else {
   fmt.Println("create file:",newfilename)
  }
  for copylen < size {
   n,err2 := file.Read(buf)
   if err2 != nil && err2 != io.EOF {
    fmt.Println(err2,"failed to read from:",file)
    break
   }
   if n <= 0 {
    break
   }
   //fmt.Println(n,len(buf))
   //写文件
   w_buf := buf[:n]
   newfile.Write(w_buf)
   copylen += n
  }
 }

 return
}
func main() {
 flag.Parse()
 if *infile == "Null" {
  fmt.Println("no file to input")
  return
 }
 file,err := os.Open(*infile)
 if err != nil {
  fmt.Println("failed to open:",*infile)
 }
 defer file.Close()
 size,_ := strconv.Atoi(*size)
 SplitFile(file,size*1024)
}

希望本文所述对大家的Go语言程序设计有所帮助。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读