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

golang 大文件分割

发布时间:2020-12-16 09:39:18 所属栏目:大数据 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 golang 大文件分割 package mainimport ( "fmt" "io/ioutil" "math" "os" "strconv")const chunkSize int64 = 4 20func main() { fileInfo,err := os.

以下代码由PHP站长网 52php.cn收集自互联网

现在PHP站长网小编把它分享给大家,仅供参考

golang 大文件分割
package main

import (
    "fmt"
    "io/ioutil"
    "math"
    "os"
    "strconv"
)

const chunkSize int64 = 4 << 20

func main() {
    fileInfo,err := os.Stat("test.zip")
    if err != nil {
        fmt.Println(err)
    }

    num := int(math.Ceil(float64(fileInfo.Size()) / float64(chunkSize)))

    fi,err := os.OpenFile("test.zip",os.O_RDONLY,os.ModePerm)
    if err != nil {
        fmt.Println(err)
        return
    }
    b := make([]byte,chunkSize)
    var i int64 = 1
    for ; i <= int64(num); i++ {

        fi.Seek((i-1)*(chunkSize),0)

        if len(b) > int((fileInfo.Size() - (i-1)*chunkSize)) {
            b = make([]byte,fileInfo.Size()-(i-1)*chunkSize)
        }

        fi.Read(b)

        f,err := os.OpenFile("./"+strconv.Itoa(int(i))+".db",os.O_CREATE|os.O_WRONLY,os.ModePerm)
        if err != nil {
            fmt.Println(err)
            return
        }
        f.Write(b)
        f.Close()
    }
    fi.Close()
    fii,os.O_CREATE|os.O_WRONLY|os.O_APPEND,os.ModePerm)
    if err != nil {
        fmt.Println(err)
        return
    }
    for i := 1; i <= num; i++ {
        f,os.ModePerm)
        if err != nil {
            fmt.Println(err)
            return
        }
        b,err := ioutil.ReadAll(f)
        if err != nil {
            fmt.Println(err)
            return
        }
        fii.Write(b)
        f.Close()
    }
}

以上内容由PHP站长网【52php.cn】收集整理供大家参考研究

如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。

(编辑:李大同)

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

    推荐文章
      热点阅读