Go-归档文件-tar
文件归档 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的更多相关文章
- 打包程序tar
tar [选项] tar文件 [目录文件] 常用选项如下所述: -c:创建新的归档文件 -d:检查归档文件与指定目录的差异 -r:向归档文件中追加文件 -v:显示命令的执行日期 -u:只有当需要追加 ...
- tar + find
将tar 和find 结合,选定目录下指定的文件类型进行打包解压: tar命令用语对文件进行归档以及恢复归档文件,"tar xzvf"命令用于释放<恢复>". ...
- Linux学习之CentOS(十九)------linux 下压缩与解压之 tar、gzip、bzip2、zip、rar
将文件存储到归档文件中或者从归档文件中获取原始文件,以及为文件创建归档文件 tar [option] [modifiers] [file-list] 参数 file-list是tar进行归档和提取的文 ...
- Linux每天一个命令:tar
Linux tar命令简介: tar命令可以为linux的文件和目录创建档案.利用tar,可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向档案中加入新的文件.tar最初被用来在磁 ...
- 004--linux命令tar 软硬链接
一.tar命令介绍: -c:创建一个新的tar文件 -t:列出tar文件中目录的内容 -x:从tar文件中抽取文件 -f:指定归档文件或磁带(也可能是软盘)设备(一般都要选) -v:显示所打包的文件的 ...
- tar.gz 文件解压
tar.gz 文件解压 解压缩 file.tar.gz 的过程中出现如下所示问题: tar: 它似乎不像是一个 tar 归档文件 tar: 跳转到下一个头 tar: 由于前次错误,将以上次的错误状态退 ...
- Linux 文件压缩与归档
.note-content { font-family: "Helvetica Neue", Arial, "Hiragino Sans GB", STHeit ...
- Linux常用命令及shell脚本
一. 用户管理(添加用户.切换用户.删除用户) ~ ...
- 39-tar 打包压缩
将文件存储到归档文件中或者从归档文件中获取原始文件,以及为文件创建归档文件 tar [option] [modifiers] [file-list] 参数 file-list是tar进行归档和提取的文 ...
- Linux常用的日志分析命令与工具
>>基础命令 操作 命令 说明 查看文件的内容 cat -n access.log -n显示行号 分页显示文件 more access.log Enter下一行,空格下一页,F下一屏,B上 ...
随机推荐
- (几乎)完美实现 el-table 列宽自适应
背景 Element UI 是 PC 端比较流行的 Vue.js UI 框架,它的组件库基本能满足大部分常见的业务需求.但有时候会有一些定制性比较高的需求,组件本身可能没办法满足.最近在项目里就碰到了 ...
- Javascript基本数据认识
1.Js的组成 2.Js的三种引入 行内式 <input type="button" value="来嘛来嘛" onclick="alert(' ...
- openCV - 3. Mat对象
Mat对象与IplImage对象.Mat对象使用.Mat定义数组 Mat对象与IplImage对象 Mat对象OpenCV2.0之后引进的图像数据结构.自动分配内存.不存在内存泄漏的问题,是面向对象的 ...
- [C#.NET 拾遗补漏]08:强大的LINQ
大家好,这是 [C#.NET 拾遗补漏] 系列的第 08 篇文章,今天讲 C# 强大的 LINQ 查询.LINQ 是我最喜欢的 C# 语言特性之一. LINQ 是 Language INtegrate ...
- 超全Python IDE武器库大总结,优缺点一目了然!
本文介绍了多个 Python IDE,并评价其优缺点.读者可以参考此文列举的 Python IDE 列表,选择适合自己的编辑器. 写 Python 代码最好的方式莫过于使用集成开发环境(IDE)了.它 ...
- oracle的system登不了
(密码对的,密码错直接就是被拒了) 这个一直弹出改密码 但是改了点[确定],又说 oracle改system密码 [oracle@localhost ~]$ sqlplus / as sysdba S ...
- Android开发之强大的网络判断工具,判断是否联网,判断是wifi还是3g网络等java工具代码类
作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985, 转载请说明出处. 给大家分享一个Android开发者常用的工具类.主要针对网络判断的 功能强大.下面 ...
- Vue.use() 不一样的发现
1.Vue.use()首先是可以接受一个函数 var a = function () { console.log(a)}Vue.use(a) // 没有问题会输出a 2.当这个a上面有install属 ...
- Kubernetes v1.12/v1.13 二进制部署集群(HTTPS+RBAC)
官方提供的几种Kubernetes部署方式 minikube Minikube是一个工具,可以在本地快速运行一个单点的Kubernetes,尝试Kubernetes或日常开发的用户使用.不能用于生产环 ...
- 浏览器调试的必知必会,零基础足够详细-第一节console面板、移动端调试
前言 本文已经发布视频点击查看 开发过程中,浏览器的调试非常重要,可以说是必备的技巧,本文我就会分享一些自己掌握的技巧,欢迎补充 我们默认使用Chrome浏览器,但是你使用新edge浏览器也是可以的 ...