您好,登錄后才能下訂單哦!
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語言中怎么對文件按照指定塊大小進行分割問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。