注册 登录
  • 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

如何使用golang对文件按照指定块大小进行分割的代码

go 水墨上仙 2190次浏览 已收录 手机上查看

通过golang对文件按照指定块大小进行分割的代码来源:http://www.oschina.net/code/snippet_222150_15499

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)
}


开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明如何使用golang对文件按照指定块大小进行分割的代码
喜欢 (0)
[开心洋葱]
分享 (0)
关于作者:
水墨上仙
……
加载中……