文件归档 tar
  1. 创建一个tar头部并自动填充tar头部信息 tar.FileInfoHeader() 联合 os.Stat() 方法
  2. 手动填写 tar头部信息 tar.Header{}

读取归档文件
  1. 打开文件 os.Open()
  2. 创建读取对象 tar.NewReader()
  4. 获取读取对象文件信息 .FileInfo()
  5. 获取下一个实体 .Next()
  6. 读取当前实体内容 .Read()

归档文件写入内容
  1. 打开tar 文件 os.OpenFile()
  2. 创建 tar写对象 tar.NewWriter()
  3. 获取文件信息 os.Star()
  4. 自动填充文件信息 tar.FielInfoHeader()
  5. 写入文件头 .WriterHeader()
  6. 读取源文件所有内容内容 ioutil.ReadAll()
  7. 写入文件内容 .Write

  1. package main
  2.  
  3. import (
  4. "log"
  5. "fmt"
  6. "io/ioutil"
  7. "os"
  8. "archive/tar"
  9. "io"
  10. )
  11.  
  12. func main() {
  13. // 目标路径
  14. targetPath := "C:\\workspace"
  15. //归档文件名
  16. appleFrameName := "appleFrame.tar"
  17. // 文件归档
  18. err := TarFile(targetPath, appleFrameName)
  19. if err != nil {
  20. log.Fatalln(err)
  21. return
  22. }
  23. err = TarRead(targetPath, appleFrameName)
  24. if err != nil {
  25. log.Fatalln(err)
  26. return
  27. }
  28. }
  29.  
  30. // 归档目标下文件
  31. func TarFile(targetPath, appleFrameName string) (err error) {
  32. // 获取目标目录下所有文件
  33. files := make([]string, 0)
  34. dirs, err := ioutil.ReadDir(targetPath)
  35. if err != nil {
  36. return
  37. }
  38. fmt.Println(dirs)
  39. for _, file := range dirs {
  40. if file.IsDir() {
  41. continue
  42. }
  43. files = append(files, file.Name())
  44. }
  45.  
  46. fmt.Println(files)
  47. // 创建苹果框
  48. appleFrame, err := os.OpenFile("C:\\workspace\\" + appleFrameName,os.O_CREATE|os.O_WRONLY, 644)
  49. if err != nil {
  50. log.Fatalln(err)
  51. return
  52. }
  53. defer appleFrame.Close()
  54. appleTar := tar.NewWriter(appleFrame)
  55. defer appleTar.Close()
  56.  
  57. // 放入苹果, 同名则直接覆盖掉
  58. for _, file := range files {
  59. // 获取文件信息
  60. fileInfo, err := os.Stat(targetPath + "\\" + file)
  61. if err != nil {
  62. log.Fatalln(err)
  63. return err
  64. }
  65. // 自动填充头部信息
  66. hdr, err := tar.FileInfoHeader(fileInfo, "")
  67. if err != nil {
  68. log.Fatalln(err)
  69. return err
  70. }
  71. // 写入头部信息
  72. err = appleTar.WriteHeader(hdr)
  73. if err != nil {
  74. log.Fatalln(err)
  75. return err
  76. }
  77. f, err := os.Open(targetPath + "\\" + file)
  78. if err != nil {
  79. fmt.Println(err)
  80. return err
  81. }
  82. // 读取文件所有内容
  83. content, err := ioutil.ReadAll(f)
  84. if err != nil {
  85. log.Fatalln(err)
  86. return err
  87. }
  88. // 写入到苹果框中
  89. appleTar.Write(content)
  90. // 关闭文件
  91. f.Close()
  92. }
  93. return
  94. }
  95.  
  96. //读取归档文件
  97. func TarRead(targetPath, appleFrameName string) (err error) {
  98. f, err := os.Open(targetPath + "\\" + appleFrameName)
  99. if err != nil {
  100. return
  101. }
  102. defer f.Close()
  103. tr := tar.NewReader(f)
  104. for hdr, err := tr.Next(); err != io.EOF; hdr, err = tr.Next(){
  105. if err != nil {
  106. return err
  107. }
  108. fmt.Println(hdr.Name)
  109. }
  110. return
  111. }

  

Go-归档文件-tar的更多相关文章

  1. 打包程序tar

    tar  [选项] tar文件 [目录文件] 常用选项如下所述: -c:创建新的归档文件 -d:检查归档文件与指定目录的差异 -r:向归档文件中追加文件 -v:显示命令的执行日期 -u:只有当需要追加 ...

  2. tar + find

    将tar 和find 结合,选定目录下指定的文件类型进行打包解压: tar命令用语对文件进行归档以及恢复归档文件,"tar xzvf"命令用于释放<恢复>". ...

  3. Linux学习之CentOS(十九)------linux 下压缩与解压之 tar、gzip、bzip2、zip、rar

    将文件存储到归档文件中或者从归档文件中获取原始文件,以及为文件创建归档文件 tar [option] [modifiers] [file-list] 参数 file-list是tar进行归档和提取的文 ...

  4. Linux每天一个命令:tar

    Linux tar命令简介: tar命令可以为linux的文件和目录创建档案.利用tar,可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向档案中加入新的文件.tar最初被用来在磁 ...

  5. 004--linux命令tar 软硬链接

    一.tar命令介绍: -c:创建一个新的tar文件 -t:列出tar文件中目录的内容 -x:从tar文件中抽取文件 -f:指定归档文件或磁带(也可能是软盘)设备(一般都要选) -v:显示所打包的文件的 ...

  6. tar.gz 文件解压

    tar.gz 文件解压 解压缩 file.tar.gz 的过程中出现如下所示问题: tar: 它似乎不像是一个 tar 归档文件 tar: 跳转到下一个头 tar: 由于前次错误,将以上次的错误状态退 ...

  7. Linux 文件压缩与归档

    .note-content { font-family: "Helvetica Neue", Arial, "Hiragino Sans GB", STHeit ...

  8. Linux常用命令及shell脚本

    一.     用户管理(添加用户.切换用户.删除用户) ~                                                                        ...

  9. 39-tar 打包压缩

    将文件存储到归档文件中或者从归档文件中获取原始文件,以及为文件创建归档文件 tar [option] [modifiers] [file-list] 参数 file-list是tar进行归档和提取的文 ...

  10. Linux常用的日志分析命令与工具

    >>基础命令 操作 命令 说明 查看文件的内容 cat -n access.log -n显示行号 分页显示文件 more access.log Enter下一行,空格下一页,F下一屏,B上 ...

随机推荐

  1. Win 10 蓝屏,出现DRIVER_POWER_STATE_FAILURE的解决方法

    笔者个人笔记本电脑,用的是华硕的飞行堡垒FZ系列,上个月装了个Ubuntu的系统,之后换回Windows后,电脑疯狂蓝屏,错误代码只有这个DRIVER_POWER_STATE_FAILURE.一开始我 ...

  2. 百度与谷歌seo优化的差别

    http://www.wocaoseo.com/thread-126-1-1.html 常有朋友问谷歌(google)和百度(baidu)到底有什么区别?我在纠结这个问题该如何回答.如果从公平公正的角 ...

  3. POJ-2299-Ultra-QuickSort(单点更新 + 区间查询+离散化)

    In this problem, you have to analyze a particular sorting algorithm. The algorithm processes a seque ...

  4. 机器学习,详解SVM软间隔与对偶问题

    今天是机器学习专题的第34篇文章,我们继续来聊聊SVM模型. 我们在上一篇文章当中推导了SVM模型在硬间隔的原理以及公式,最后我们消去了所有的变量,只剩下了\(\alpha\).在硬间隔模型当中,样本 ...

  5. ubuntu 18.04下修改python3指向

    起因 ubuntu18.04下默认带的是python3.6,但是因为需求需要升级为python3.7 步骤 安装 sudo apt install python3.7 修改环境变量 修改默认的pyth ...

  6. leetcode刷题-50Pow(x, n)

    题目 实现 pow(x, n) ,即计算 x 的 n 次幂函数. 思路 最初的想法n>0计算res = res*x 计算n次,n<0,将x取倒数后同理,但结果表明计算速度太慢了. 后续应该 ...

  7. latex pdf 转 eps

    latex pdf 转 eps 方法一,使用命令行,缺点是得到的文件有点大 pdf 转 ps, pdf2ps input.pdf output.ps ps 转 eps, ps2eps input.ps ...

  8. -webkit-line-clamp下多行文字溢出点点点...

    限制在一个块元素显示的文本的行数. -webkit-line-clamp 是一个 不规范的属性(unsupported WebKit property),它没有出现在 CSS 规范草案中. 为了实现该 ...

  9. Iterator泛型指针

    Iterator泛型指针 每个标准容器都提供一个名为: begin()的操作函数,返回一个iterator指向第一个元素: end()操作函数,返回一个iterator指向最后一个元素的下一位置: 定 ...

  10. 论文:Bottom-Up and Top-Down Attention for Image Captioning and Visual Question Answering-阅读总结

    Bottom-Up and Top-Down Attention for Image Captioning and Visual Question Answering-阅读总结 笔记不能简单的抄写文中 ...