golang 大文件分割

zhuqihe02 · · 2424 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

golang 大文件分割
  1. package main
  2. import (
  3. "fmt"
  4. "io/ioutil"
  5. "math"
  6. "os"
  7. "strconv"
  8. )
  9. const chunkSize int64 = 4 << 20
  10. func main() {
  11. fileInfo, err := os.Stat("test.zip")
  12. if err != nil {
  13. fmt.Println(err)
  14. }
  15. num := int(math.Ceil(float64(fileInfo.Size()) / float64(chunkSize)))
  16. fi, err := os.OpenFile("test.zip", os.O_RDONLY, os.ModePerm)
  17. if err != nil {
  18. fmt.Println(err)
  19. return
  20. }
  21. b := make([]byte, chunkSize)
  22. var i int64 = 1
  23. for ; i <= int64(num); i++ {
  24. fi.Seek((i-1)*(chunkSize), 0)
  25. if len(b) > int((fileInfo.Size() - (i-1)*chunkSize)) {
  26. b = make([]byte, fileInfo.Size()-(i-1)*chunkSize)
  27. }
  28. fi.Read(b)
  29. f, err := os.OpenFile("./"+strconv.Itoa(int(i))+".db", os.O_CREATE|os.O_WRONLY, os.ModePerm)
  30. if err != nil {
  31. fmt.Println(err)
  32. return
  33. }
  34. f.Write(b)
  35. f.Close()
  36. }
  37. fi.Close()
  38. fii, err := os.OpenFile("test.zip", os.O_CREATE|os.O_WRONLY|os.O_APPEND, os.ModePerm)
  39. if err != nil {
  40. fmt.Println(err)
  41. return
  42. }
  43. for i := 1; i <= num; i++ {
  44. f, err := os.OpenFile("./"+strconv.Itoa(int(i))+".db", os.O_RDONLY, os.ModePerm)
  45. if err != nil {
  46. fmt.Println(err)
  47. return
  48. }
  49. b, err := ioutil.ReadAll(f)
  50. if err != nil {
  51. fmt.Println(err)
  52. return
  53. }
  54. fii.Write(b)
  55. f.Close()
  56. }
  57. }
复制代码www.kmnk01.com www.jjg3.com

有疑问加站长微信联系(非本文作者)

本文来自:CSDN博客

感谢作者:zhuqihe02

查看原文:golang 大文件分割

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2424 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传