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语言程序设计有所帮助。

(0)

相关推荐

  • Go语言文件操作的方法

    本文实例讲述了Go语言文件操作的方法.分享给大家供大家参考.具体如下: 关闭文件: 复制代码 代码如下: func (file *File) Close() os.Error {     if file == nil {         return os.EINVAL     }     e := syscall.Close(file.fd)     file.fd = -1 // so it can't be closed again     if e != 0 {         retu

  • Go语言编程中对文件读写的基本方法整理

    1.func Copy(dst Writer, src Reader) (written int64, err error)这个函数是从一个文件读取拷贝到另外一个文件,一直拷贝到读取文件的EOF,所以不会返回io.EOF错误,参数是写入目标器和读取目标器,返回int64的拷贝字节数和err信息 复制代码 代码如下: import (  "fmt"  "io"  "os" ) func main() {  r, _ := os.Open("

  • golang简单获取上传文件大小的实现代码

    本文实例讲述了golang简单获取上传文件大小的方法.分享给大家供大家参考,具体如下: 复制代码 代码如下: package main import (     "fmt"     "io"     "net/http"     "log"     "os" ) // 获取文件大小的接口 type Size interface {     Size() int64 } // 获取文件信息的接口 type S

  • GO语言实现文件上传代码分享

    功能很简单,代码也很简洁,这里就不多废话了. 复制代码 代码如下: package main import (     "fmt"     "io"     "net/http"     "os" ) const (     upload_path string = "./upload/" ) func helloHandle(w http.ResponseWriter, r *http.Request)

  • Go语言编程中判断文件是否存在是创建目录的方法

    判断文件是否存在 os.IsExists()函数和os.IsNotExists(),他们的函数的原形是func IsExist(err error) bool func IsNotExist(err error) bool 都是传入一个err返回bool 这里注意了 err已经定义好了 复制代码 代码如下: /*  var (      ErrInvalid    = errors.New("invalid argument")      ErrPermission = errors.

  • go语言实现一个最简单的http文件服务器实例

    本文实例讲述了go语言实现一个最简单的http文件服务器的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: package main import (     "net/http" ) func main() {     http.Handle("/", http.FileServer(http.Dir("./")))     http.ListenAndServe(":8123", nil) } 希望本文

  • go语言实现文件分割的方法

    本文实例讲述了go语言实现文件分割的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: import (  // "bufio"  "flag"  "fmt"  "io"  "os" ) import "strconv" var infile *string = flag.String("f", "Null", "ple

  • Go语言判断指定文件是否存在的方法

    本文实例讲述了Go语言判断指定文件是否存在的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: package main    import (     "fmt"     "os" )    func main() {     f, err := os.Open("dotcoo.com.txt")     if err != nil && os.IsNotExist(err) {         fmt.Pri

  • GO语言常用的文件读取方式

    本文实例讲述了GO语言常用的文件读取方式.分享给大家供大家参考.具体分析如下: Golang 的文件读取方法很多,刚上手时不知道怎么选择,所以贴在此处便后速查. 一次性读取 小文件推荐一次性读取,这样程序更简单,而且速度最快. 复制代码 代码如下: func ReadAll(filePth string) ([]byte, error) {  f, err := os.Open(filePth)  if err != nil {   return nil, err  } return iouti

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

    本文实例讲述了go语言对文件按照指定块大小进行分割的方法.分享给大家供大家参考.具体如下: 复制代码 代码如下: import (  // "bufio"  "flag"  "fmt"  "io"  "os" ) import "strconv" var infile *string = flag.String("f", "Null", "

  • 一文详解C语言中文件相关函数的使用

    目录 一.文件和流 1.程序文件 2.数据文件 3.流 二.文件组成 三.文件的打开和关闭 1.文件的打开fopen 2.文件关闭fclose 四.文件的顺序读写 1.使用fputc和fgetc写入/读取单个字符 2.使用fputs和fgets写入/读取一串字符 3.使用fprintf和fscanf按照指定的格式写入/读取 4.使用fwrite和fread按照二进制的方式写入/读取 5.使用sprintf和sscanf将格式化数据和字符串互相转换(文件无关) 五.文件的随机读写 1.fseek(

  • C语言中文件常见操作的示例详解

    目录 文件打开和关闭 文件写入 文件读取 fseek函数 ftell函数 Demo示例 解决读取乱码 FILE为C语言提供的文件类型,它是一个结构体类型,用于存放文件的相关信息.文件打开成功时,对它作了内存分配和初始化. 每当打开一个文件的时候,系统会根据文件的情况自动创建一个FILE结构的变量,并填充其中的信息,使用者不必关心细节. 一般都是通过一个FILE的指针来维护这个FILE结构的变量,这样使用起来更加方便. 文件打开和关闭 C语言的安全文件打开函数为_wfopen_s和_fopen_s

  • PHP基于迭代实现文件夹复制、删除、查看大小等操作的方法

    本文实例讲述了PHP基于迭代实现文件夹复制.删除.查看大小等操作的方法.分享给大家供大家参考,具体如下: 前面一篇 PHP递归实现文件夹的复制.删除.查看大小操作 分析了递归操作使用技巧,这里再来分析一下迭代的操作技巧. "既然递归能很好的解决,为什么还要用迭代呢"?主要的原因还是效率问题-- 递归的概念是函数调用自身,把一个复杂的问题分解成与其相似的多个子问题来解决,可以极大的减少代码量,使得程序看起来非常优雅. 由于系统要为每次函数调用分配运行空间,并使用压栈予以记录.在函数调用结

  • PHP实现类似于C语言的文件读取及解析功能

    本文实例讲述了PHP实现类似于C语言的文件读取及解析功能.分享给大家供大家参考,具体如下: $log_file_name = 'D:/static/develop/kuai_zhi/acagrid.com/public/Logs/'.date('Ym').'/'.date('d').'_error.log'; //$log_file_name = 'D:/static/develop/kuai_zhi/acagrid.com/public/Logs/201701/19_error.log'; i

  • php实现遍历目录并删除指定文件中指定内容

    现在正坐在安静的寝室里,寒假俨然已经离我而去了--今天发的是我寒假里搞的最后一次学习,之后的时间就一直在看海贼王了. 以前写过一个C语言的遍历目录+复制文件的程序,很长很复杂,现在用PHP一样可以实现遍历目录,而代码就短了不少.这个程序目的是遍历目录,找到所有指定文件名的文件,并删除其中指定的字符串. 复制代码 代码如下: <?php  //功能:删除指定目录(包括子目录)下所有指定文件中指定字符串 $tmpfiledir = $_SERVER["DOCUMENT_ROOT"].

  • 查看linux文件系统块大小的实现方法

    在linux系统上,可以用命令tune2fs ,测试如下 [root@localhost test10g]# tune2fs -help tune2fs 1.35 (28-Feb-2004) tune2fs: invalid option -- h Usage: tune2fs [-c max-mounts-count] [-e errors-behavior] [-g group] [-i interval[d|m|w]] [-j] [-J journal-options] [-l] [-s

  • C#递归实现显示文件夹及所有文件并计算其大小的方法

    算法中递归的一个典型应用就是遍历目标文件夹,并把该文件夹下的所有文件和文件夹打印或显示出来,还可以递归计算出目标文件夹的总大小.本文即以实例形式展示了C#递归实现显示目标文件夹的所有文件和文件夹,并计算目标文件夹的大小的方法. 具体实现代码如下: class Program { static void Main(string[] args) { Console.WriteLine("输入目标文件夹"); string path = Console.ReadLine(); FindFol

  • 利用C语言替换文件中某一行的方法

    文件中存贮的内容如下所示: 11 1122 0 1122 * * 0 0 22 222 0 222 * * 0 0 33 333 0 333 * * 0 0 通过使用下面的几个函数,fopen,fprintf,fscanf,fseek,ftell . 具体的函数函数原型如下所示: FILE*fopen(const char*filename,const char *mode); int fprintf(FILE*stream,const char *format,...) int fscanf(

  • iOS开发之image图片压缩及压缩成指定大小的两种方法

    ///压缩图片 + (NSData *)imageCompressToData:(UIImage *)image{ NSData *data=UIImageJPEGRepresentation(image, 1.0); if (data.length>300*1024) { if (data.length>1024*1024) {//1M以及以上 data=UIImageJPEGRepresentation(image, 0.1); }else if (data.length>512*1

随机推荐