• 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
    }
    

      

  • 相关阅读:
    Queueing at Bank【PAT 1017题】
    table标签的布局
    股票投资的24堂必修课1
    股票投资的24堂必修课2基本面分析
    Eclipse最全快捷键 分享便捷与快乐
    浅析将matlab函数编译成dll供Cpp调用的方法
    Python编程语言中调用Matlab绘制保存数据的方案
    Eclipse中10个最有用的快捷键组合
    WPF 4 DataGrid 控件(进阶篇二)
    VBS 操作 IIS
  • 原文地址:https://www.cnblogs.com/2bjiujiu/p/9040469.html
Copyright © 2020-2023  润新知