go语言对文件按照指定块大小进行分割的方法

 更新时间:2015年03月04日 10:36:14   作者:work24  
这篇文章主要介绍了go语言对文件按照指定块大小进行分割的方法,实例分析了Go语言文件操作的技巧,需要的朋友可以参考下

本文实例讲述了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语言程序设计有所帮助。

相关文章

  • golang 设置web请求状态码操作

    golang 设置web请求状态码操作

    这篇文章主要介绍了golang 设置web请求状态码操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • go语言实现接口查询

    go语言实现接口查询

    这篇文章主要介绍了go语言实现接口查询,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • 使用go gin来操作cookie的讲解

    使用go gin来操作cookie的讲解

    今天小编就为大家分享一篇关于使用go gin来操作cookie的讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-04-04
  • golang实现页面静态化操作的示例代码

    golang实现页面静态化操作的示例代码

    这篇文章主要介绍了golang实现页面静态化操作的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • Go返回int64类型字段超出javascript Number范围的解决方法

    Go返回int64类型字段超出javascript Number范围的解决方法

    这篇文章主要介绍了Go返回int64类型字段超出javascript Number范围的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • Go语言变量创建的五种方法

    Go语言变量创建的五种方法

    这篇文章主要介绍了Go语言五种变量创建的方法,本文给大家提到了匿名变量的优点,通过实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2020-02-02
  • Go语法糖之‘...’ 的使用实例详解

    Go语法糖之‘...’ 的使用实例详解

    语法糖(Syntactic sugar),也译为糖衣语法,指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。这篇文章主要给大家介绍Go语法糖之‘...’ 的使用,感兴趣的朋友一起看看吧
    2018-10-10
  • Golang获取目录下的文件及目录信息操作

    Golang获取目录下的文件及目录信息操作

    这篇文章主要介绍了Golang获取目录下的文件及目录信息操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • golang实现京东支付v2版本的示例代码

    golang实现京东支付v2版本的示例代码

    这篇文章主要介绍了golang实现京东支付v2版本,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • Go实现短url项目的方法示例

    Go实现短url项目的方法示例

    这篇文章主要介绍了Go实现短url项目的方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03

最新评论