ホーム プログラミング言語 golang go file processing Go 言語での tar アーカイブ ファイルの読み取りおよび書き込み操作

Go 言語での tar アーカイブ ファイルの読み取りおよび書き込み操作

Go 言語での tar アーカイブ ファイルの読み取りおよび書き込み操作

 
 
前のセクション「 .zip アーカイブ ファイルの作成」では、zip アーカイブ ファイルの作成と読み込みについて紹介しました。次に、tar アーカイブ ファイルの作成と読み込みについて紹介します。

 

tar アーカイブを作成する

tar はパッケージ化形式ですが、ファイルは圧縮されないため、圧縮する必要がないため、パッケージ化されたドキュメントは通常、zip や tar.gz よりもはるかに大きくなり、パッケージング速度が非常に速くなり、CPU 使用率も低くなります。梱包時のレートも低く、非常に低いです。

tar の目的は、ファイルの管理を容易にすることです。たとえば、私たちの生活では、部屋の隅々に多くの小さなアイテムが散らばっています。利便性と整頓のために、これらの散らばったアイテムをボックスに整理し、その機能を実現します。タールの場合もこれに似ています。

tar アーカイブの作成は .zip アーカイブの作成と非常に似ていますが、主な違いは、すべてのデータを同じライターに書き込むことと、ファイルのデータの前に単なるファイル名ではなく完全なヘッダーを書き込む必要があることです。

タール包装の原理は次のとおりです。

  • ファイル x.tar を作成し、tar ヘッダー情報を x.tar に書き込みます。
  • tar 化するファイルを開き、ヘッダー情報を x.tar に書き込み、次にファイル情報を x.tar に書き込みます。
  • tar 化するファイルが複数ある場合は、すべてのファイルが x.tar に書き込まれるまで 2 番目の手順を繰り返します。
  • x.tar を閉じて、パッケージ化を完了します。

以下は、サンプル プログラムを使用した Go 言語の tar パッケージ化の実装の簡単なデモンストレーションです。

package main

import(
    "archive/tar"
    "fmt"
    "io"
    "os"
)

func main()
    F, err:= os.Create("./ output.tar")// tarファイルを作成します
    if err != nil {
        fmt.Println(err)
        return
    }
    defer f.Close()

    tw:= tar.NewWriter(f)
    defer tw.Close()

    fileinfo, err:= os.Stat(“./ main.exe”)//関連するファイル情報を取得します
    if err!= nil {
        fmt.Println(err)
    }
    hdr, err:= tar.FileInfoHeader(fileinfo、"")
    if err != nil {
        fmt.Println(err)
    }

    err = tw.WriteHeader(hdr)//ヘッダファイル情報を書き込みます
    if err != nil {
        fmt.Println(err)
    }

    f1, err:= os.Open(“./ main.exe”)
    if err!= nil {
        fmt.Println(err)
        return
    }
    m, err:= io.Copy(tw、f1)//main.exeファイルの情報を圧縮パッケージに書き込みます
    if err!= nil {
        fmt.Println(err)
    }
    fmt.Println(m)
} 

tar アーカイブを抽出します

tar アーカイブを解凍するのは、tar アーカイブを作成するよりも若干簡単です。まずファイルを開き、tar ヘッダーからアーカイブ ファイルに保存されているヘッダー情報をループし、ファイル ヘッダーからファイル名を読み取り、このファイル名でファイルを作成し、このファイルに書き込む必要があります。データを入力するだけです。 。

サンプルコードは次のとおりです。

package main

import (
    "archive/tar"
    "fmt"
    "io"
    "os"
)

func main() {
    f, err := os.Open("output.tar")
    if err != nil {
        fmt.Println("ファイルを開けません", err)
        return
    }
    defer f.Close()
    r := tar.NewReader(f)
    for hdr, err := r.Next(); err != io.EOF; hdr, err = r.Next() {
        if err != nil {
            fmt.Println(err)
            return
        }
        fileinfo := hdr.FileInfo()
        fmt.Println(fileinfo.Name())
        f, err := os.Create("123" + fileinfo.Name())
        if err != nil {
            fmt.Println(err)
        }
        defer f.Close()
        _, err = io.Copy(f, r)
        if err != nil {
            fmt.Println(err)
        }
    }
} 

上記のプログラムを実行すると、次の図に示すように、tar パッケージ内のファイルが現在のディレクトリに解凍されます。

これで、ファイルの圧縮とアーカイブ、および一般的なファイル処理についての説明が完了しました。 Go 言語が io.Reader、io.ReadCloser、io.Writer、io.WriteCloser などのインターフェイスを使用してファイルを処理する方法により、開発者は同じエンコード モードを使用してファイルや他のストリーム (ネットワーク ストリームなど) を読み書きすることができます。文字列). これにより、難易度が大幅に軽減されます。

 

「 Go 言語での tar アーカイブ ファイルの読み取りおよび書き込み操作」についてわかりやすく解説!絶対に観るべきベスト2動画

【たった1時間で学べる】Go言語のプログラミング初心者向けの超入門講座【文字書き起こし、ソースコードも完全無料!】
#15 初見のGo言語で掲示板を作ってみる シャチョーのコードチャレンジ!
Share via
Copy link