go语言对文件按照指定块大小进行分割的方法
2015-03-04 10:36
627 查看
复制代码 代码如下:
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)
}
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)
}
相关文章推荐
- Linux中csv文件按照指定大小进行分割的shell
- Log4J-重写方法,实现按照日期大小进行分割文件
- php实现将字符串按照指定距离进行分割的方法
- php实现将字符串按照指定距离进行分割的方法
- 拖拽文件按照指定大小进行拆分
- where in的sql语句按照指定ID进行排序的解决方法
- Go语言判断指定文件是否存在的方法
- EntLib Validation Application Block 01 通过配置文件,自行指定对象自身方法进行验证
- 将大文件分割为指定大小的文件
- js使用split函数按照多个字符对字符串进行分割的方法
- apache访问日志和错误日志按照日期进行归类分割生成方法
- C# 使用 itextsharp 对pdf文件进行分割的几种方法(1)——按页码拷贝分割
- 一个自己写的真正判断文件格式,文件大小,而并不仅仅从扩展名来进行判断的上传方法,进一步加强防止软件或恶意的木马图片上传
- php查找指定目录下指定大小文件的方法
- 将PDF文件进行分割拆分的方法
- 将大文件按照首字母分割到不同的小文件中 实现取第二个[]中间的内容进行分割
- 对指定文件夹进行递归遍历,将所有文件存到QStringList里。两种方法
- 一个自己写的真正判断文件格式,文件大小,而并不仅仅从扩展名来进行判断的上传方法,进一步加强防止软件或恶意的木马图片上传
- C#下按照指定字符进行字符串分割
- Linux生成指定大小文件的方法