go語言對文件按照指定塊大小進(jìn)行分割的方法
更新時(shí)間:2015年03月04日 10:36:14 作者:work24
這篇文章主要介紹了go語言對文件按照指定塊大小進(jìn)行分割的方法,實(shí)例分析了Go語言文件操作的技巧,需要的朋友可以參考下
本文實(shí)例講述了go語言對文件按照指定塊大小進(jìn)行分割的方法。分享給大家供大家參考。具體如下:
復(fù)制代碼 代碼如下:
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語言程序設(shè)計(jì)有所幫助。
相關(guān)文章
Go語言防范SQL注入CSRF及XSS攻擊實(shí)例探究
在本文中,我們將會(huì)介紹幾種最常見的攻擊類型,并且介紹如何使用Golang來防范這些攻擊,本文會(huì)涉及XSS攻擊、CSRF攻擊、SQL注入等,如果你想學(xué)習(xí)Golang和網(wǎng)絡(luò)安全的相關(guān)知識,那么這篇文章會(huì)是一個(gè)很好的開始2024-01-01Go?Wails開發(fā)桌面應(yīng)用使用示例探索
這篇文章主要為大家介紹了Go?Wails的使用示例探索,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12Go實(shí)現(xiàn)mongodb增刪改查工具類的代碼示例
這篇文章主要給大家介紹了關(guān)于Go實(shí)現(xiàn)mongodb增刪改查工具類的相關(guān)資料,MongoDB是一個(gè)NoSQL數(shù)據(jù)庫,它提供了靈活的文檔存儲(chǔ)模型以及強(qiáng)大的查詢和操作功能,需要的朋友可以參考下2023-10-10GO語言不固定參數(shù)函數(shù)與匿名函數(shù)的使用
本文主要介紹了GO語言不固定參數(shù)函數(shù)與匿名函數(shù)的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03Go語言Gin框架中使用MySQL數(shù)據(jù)庫的三種方式
本文主要介紹了Go語言Gin框架中使用MySQL數(shù)據(jù)庫的三種方式,通過三種方式實(shí)現(xiàn)增刪改查的操作,具有一定的參考價(jià)值,感興趣的可以了解一下2023-11-11使用client go實(shí)現(xiàn)自定義控制器的方法
本文我們來使用client-go實(shí)現(xiàn)一個(gè)自定義控制器,通過判斷service的Annotations屬性是否包含ingress/http,如果包含則創(chuàng)建ingress,如果不包含則不創(chuàng)建,對client go自定義控制器相關(guān)知識感興趣的朋友一起看看吧2022-05-05