加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 教程 > 正文

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

发布时间:2016-12-04 13:30:09 所属栏目:教程 来源:站长网
导读:本文实例讲述了go语言实现文件分割的方法。分享给大家供大家参考。具体实现方法如下: 复制代码 代码如下:import ( nbsp;//nbsp;"bufio" nbsp;"flag" nbsp;"fmt" nbsp;"io" nbsp;"os" ) import "strconv" var infile *string = flag.String("f", "Null", "

本文实例讲述了go语言实现文件分割的方法。分享给大家供大家参考。具体实现方法如下:

复制代码 代码如下:import (
nbsp;//nbsp;"bufio"
nbsp;"flag"
nbsp;"fmt"
nbsp;"io"
nbsp;"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) {
nbsp;finfo, err := file.Stat()
nbsp;if err != nil {
nbsp;nbsp;fmt.Println("get file info failed:", file, size)
nbsp;}
nbsp;fmt.Println(finfo, size)
nbsp;//每次最多拷贝1m
nbsp;bufsize := 1024 * 1024
nbsp;if size lt; bufsize {
nbsp;nbsp;bufsize = size
nbsp;}
nbsp;buf := make([]byte, bufsize)
nbsp;num := (int(finfo.Size()) + size - 1) / size
nbsp;fmt.Println(num, len(buf))
nbsp;for i := 0; i lt; num; i++ {
nbsp;nbsp;copylen := 0
nbsp;nbsp;newfilename := finfo.Name() + strconv.Itoa(i)
nbsp;nbsp;newfile, err1 := os.Create(newfilename)
nbsp;nbsp;if err1 != nil {
nbsp;nbsp;nbsp;fmt.Println("failed to create file", newfilename)
nbsp;nbsp;} else {
nbsp;nbsp;nbsp;fmt.Println("create file:", newfilename)
nbsp;nbsp;}
nbsp;nbsp;for copylen lt; size {
nbsp;nbsp;nbsp;n, err2 := file.Read(buf)
nbsp;nbsp;nbsp;if err2 != nil err2 != io.EOF {
nbsp;nbsp;nbsp;nbsp;fmt.Println(err2, "failed to read from:", file)
nbsp;nbsp;nbsp;nbsp;break
nbsp;nbsp;nbsp;}
nbsp;nbsp;nbsp;if n lt;= 0 {
nbsp;nbsp;nbsp;nbsp;break
nbsp;nbsp;nbsp;}
nbsp;nbsp;nbsp;//fmt.Println(n, len(buf))
nbsp;nbsp;nbsp;//写文件
nbsp;nbsp;nbsp;w_buf := buf[:n]
nbsp;nbsp;nbsp;newfile.Write(w_buf)
nbsp;nbsp;nbsp;copylen += n
nbsp;nbsp;}
nbsp;}

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

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

(编辑:PHP编程网 - 黄冈站长网)

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

    热点阅读