文件归档 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

package main

import (
"log"
"fmt"
"io/ioutil"
"os"
"archive/tar"
"io"
) func main() {
// 目标路径
targetPath := "C:\\workspace"
//归档文件名
appleFrameName := "appleFrame.tar"
// 文件归档
err := TarFile(targetPath, appleFrameName)
if err != nil {
log.Fatalln(err)
return
}
err = TarRead(targetPath, appleFrameName)
if err != nil {
log.Fatalln(err)
return
}
} // 归档目标下文件
func TarFile(targetPath, appleFrameName string) (err error) {
// 获取目标目录下所有文件
files := make([]string, 0)
dirs, err := ioutil.ReadDir(targetPath)
if err != nil {
return
}
fmt.Println(dirs)
for _, file := range dirs {
if file.IsDir() {
continue
}
files = append(files, file.Name())
} fmt.Println(files)
// 创建苹果框
appleFrame, err := os.OpenFile("C:\\workspace\\" + appleFrameName,os.O_CREATE|os.O_WRONLY, 644)
if err != nil {
log.Fatalln(err)
return
}
defer appleFrame.Close()
appleTar := tar.NewWriter(appleFrame)
defer appleTar.Close() // 放入苹果, 同名则直接覆盖掉
for _, file := range files {
// 获取文件信息
fileInfo, err := os.Stat(targetPath + "\\" + file)
if err != nil {
log.Fatalln(err)
return err
}
// 自动填充头部信息
hdr, err := tar.FileInfoHeader(fileInfo, "")
if err != nil {
log.Fatalln(err)
return err
}
// 写入头部信息
err = appleTar.WriteHeader(hdr)
if err != nil {
log.Fatalln(err)
return err
}
f, err := os.Open(targetPath + "\\" + file)
if err != nil {
fmt.Println(err)
return err
}
// 读取文件所有内容
content, err := ioutil.ReadAll(f)
if err != nil {
log.Fatalln(err)
return err
}
// 写入到苹果框中
appleTar.Write(content)
// 关闭文件
f.Close()
}
return
} //读取归档文件
func TarRead(targetPath, appleFrameName string) (err error) {
f, err := os.Open(targetPath + "\\" + appleFrameName)
if err != nil {
return
}
defer f.Close()
tr := tar.NewReader(f)
for hdr, err := tr.Next(); err != io.EOF; hdr, err = tr.Next(){
if err != nil {
return err
}
fmt.Println(hdr.Name)
}
return
}

  

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. 开源搜索引擎排名第一,Elasticsearch是如何做到的?

    一.引言 随着移动互联网.物联网.云计算等信息技术蓬勃发展,数据量呈爆炸式增长.如今我们可以轻易得从海量数据里找到想要的信息,离不开搜索引擎技术的帮助. ​ 作为开源搜索引擎领域排名第一的 Elast ...

  2. Zigzags CodeForces - 1400D

    给出一组数: 寻找四元组的个数 (i,j,k,l)其中a[i]=a[k],并且a[j]=a[l] 刚看到这个题的时候想到了记录每个数的个数,然后求前缀和以及后缀和.先枚举i和k,当a[i]和a[k]相 ...

  3. [BUUOJ记录] [GXYCTF2019]BabyUpload

    CTF三大骗局:Baby Easy Funny,本题主要考察.htaccess文件解析文件.文件类型检测绕过 打开题目给了一个上传点,上传一个php文件看看过滤规则 “后缀名不能有ph”直接禁掉了所有 ...

  4. Jmeter4.0安装教程

    1. 检查安装环境 1.1 Jdk要求 JDK版本:1.6+ 1.2 检查是否安装JDK win  +  R  快捷键打开运行,输入cmd 打开面板,在面板中输入  java -version,出现如 ...

  5. 剑指 Offer 45. 把数组排成最小的数

    题目描述 输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个. 示例 1: 输入: [10,2] 输出: "102" 示例 2: 输入: ...

  6. Linux 用户与权限

    这些天一直在看Linux的命令但是却没有写文章,因为感觉没有必要,哪些简单的命令,vi cat cd 啥的,是个做开发的就知道,所以就没写; 用户管理 第一个我们知道的用户就是Root 没错哦,这就是 ...

  7. Zabbix Server宕机报“__zbx_mem_malloc(): out of memory (requested 96 bytes)”

    早上登录Zabbix的时候,发现其提示"Zabbix server is not running: the information displayed may not be current& ...

  8. C002:计算球体体积(半径固化)

    程序: #include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { float sphereRadius=10.0f; f ...

  9. 解决Maven的JDK版本问题

    在pom文件中添加以下代码 <build> <plugins> <plugin> <groupId>org.apache.maven.plugins&l ...

  10. TIKTOK 美国制裁

    今天在B站上看了沈教授和李自然说关于TIKTOK对于美国的声明采取的做法的一些看法.其实对于他们的看法,我觉得没有对错之分.正像两个新发的观点,在没有得到历史的验证前,谁也不会承认谁错了.更多的是两个 ...