archive/tar包

        Go标准库中的tar包实现了tar格式压缩文件的存取。本包目标是覆盖大多数tar的变种,包括GNU和BSD生成的tar文件。前面一句是go标准库中所说,其实就是可以使用这个包,然后可以在windows,linux,mac,unix系统上运行,达到不需要去知道不同操作系统的tar文件底层实现而可以跨平台使用。

接下来学习这个标准库的使用:

一、首先是这个包里面的常量

[html]  view plain  copy
  1. const (  
  2.   
  3.     // Types  
  4.     TypeReg           = '0'    // 普通文件  
  5.     TypeRegA          = '\x00' // 普通文件  
  6.     TypeLink          = '1'    // 硬连接  
  7.     TypeSymlink       = '2'    // 符号连接,软连接  
  8.     TypeChar          = '3'    // 字符设备节点  
  9.     TypeBlock         = '4'    // 块设备节点  
  10.     TypeDir           = '5'    // 目录  
  11.     TypeFifo          = '6'    // fifo node  
  12.     TypeCont          = '7'    // 保留项  
  13.     TypeXHeader       = 'x'    // 可扩展头部  
  14.     TypeXGlobalHeader = 'g'    // 全局扩展头  
  15.     TypeGNULongName   = 'L'    // Next file has a long name  
  16.     TypeGNULongLink   = 'K'    // Next file symlinks to a file w/ a long name  
  17.     TypeGNUSparse     = 'S'    // 稀疏文件  
  18. )  

硬链接和软连接深入理解参考:https://www.ibm.com/developerworks/cn/linux/l-cn-hardandsymb-links/

字符设备:就是例如键盘,打印机等这种设备

块设备:就是这种以块单位存储数据,如U盘,SD卡,硬盘等这些设备

帮助理解的网站:

https://blog.csdn.net/u013904227/article/details/50483662

https://baike.baidu.com/item/%E5%9D%97%E8%AE%BE%E5%A4%87/2413231?fr=aladdin,https://baike.baidu.com/item/%E5%AD%97%E7%AC%A6%E8%AE%BE%E5%A4%87

稀疏文件:https://blog.csdn.net/cymm_liu/article/details/8760033


变量

[html]  view plain  copy
  1. var (  
  2.     ErrWriteTooLong    = errors.New("archive/tar: write too long") //写入数据太长  
  3.     ErrFieldTooLong    = errors.New("archive/tar: header field too long") //头部太长  
  4.     ErrWriteAfterClose = errors.New("archive/tar: write after close")  //关闭后写入  
  5. )  
  6.   
  7. var (  
  8.     ErrHeader = errors.New("archive/tar: invalid tar header")  //无效tar 头部  
  9. )  


type Header //该结构体代表了一个tar归档的头部,一些字段可能不被填充,Header中主要包含文件相关信息。

[html]  view plain  copy
  1. type Header struct {  
  2.    Name       string    // 文件名称  
  3.    Mode       int64     // 文件的权限和模式位  
  4.    Uid        int       // 文件所有者的用户 ID  
  5.    Gid        int       // 文件所有者的组 ID  
  6.    Size       int64     // 文件的字节长度  
  7.    ModTime    time.Time // 文件的修改时间  
  8.    Typeflag   byte      // 文件的类型  
  9.    Linkname   string    // 链接文件的目标名称  
  10.    Uname      string    // 文件所有者的用户名  
  11.    Gname      string    // 文件所有者的组名  
  12.    Devmajor   int64     // 字符设备或块设备的主设备号  
  13.    Devminor   int64     // 字符设备或块设备的次设备号  
  14.    AccessTime time.Time // 文件的访问时间  
  15.    ChangeTime time.Time // 文件的状态更改时间  
  16. }  

func FileInfoHeader(fi os.FileInfo, link string) (*Header, error)//该函数通过os.fileInfo便可创建一个Header,Header中大部分内容自动填充,一些内容需要自己设定。

func (h *Header) FileInfo() os.FileInfo  //该函数获取该Header的os.FileInfo信息


fileinfo头信息:

package main

import (
   "os"
   "fmt"
)

func main() {
   fileinfo, err := os.Stat("D:\\go_code\\1.tar")
   if err != nil {
      panic(err)
   }

   var type1 string
   if fileinfo.IsDir() {
      fmt.Println("这是一个目录")
      type1 = "目录"
   } else {
      fmt.Println("这是一个文件")
      type1 = "文件"
   }

   fmt.Println(type1 + "的信息:")
   fmt.Println("该" + type1 + "的文件名:" + fileinfo.Name())
   fmt.Println("该" + type1 + "的大小:",  float32(fileinfo.Size()) / 1024.0, "KB")
   fmt.Println("该" + type1 + "的权限:", fileinfo.Mode())
   fmt.Println("该" + type1 + "的修改时间:", fileinfo.ModTime())
}


文章在逐步完善中。。。

猜你喜欢

转载自blog.csdn.net/qq_35191331/article/details/79855081