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

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


 
 
Go 言語の標準ライブラリは、gzip を含むいくつかの圧縮形式をサポートしているため、Go プログラムは、.gz 拡張子を持つ gzip 圧縮ファイルまたは .gz 以外の拡張子を持つ非圧縮ファイルをシームレスに読み書きできます。さらに、標準ライブラリには、.zip ファイル、tar パッケージ ファイル (.tar および .tar.gz) の読み取りと書き込み、および .bz2 ファイル (つまり、.tar .bz2 ファイル) の読み取りおよび書き込みのための関数も提供されます。

 

このセクションでは、zip アーカイブの読み取りと書き込みに焦点を当てます。

zip アーカイブを作成する

Go 言語には、圧縮ファイルを操作するための archive/zip パッケージが用意されています。次は、Go 言語を使用して zip ファイルを作成する方法を示す簡単な例です。サンプル コードは次のとおりです。

 package main

import (
    "archive/zip"
    "bytes"
    "fmt"
    "os"
)

func main() {
    // 圧縮ファイルの内容を保存するバッファを作成
    buf := new(bytes.Buffer)

    // 圧縮ファイルを作成
    w := zip.NewWriter(buf)

    // ファイルを圧縮ファイルに追加
    var files = []struct {
        Name, Body string
    }{
        {"Golang.txt", "https://it-kiso.com/golang/"},
    }
    for _, file := range files {
        f, err := w.Create(file.Name)
        if err != nil {
            fmt.Println(err)
        }
        _, err = f.Write([]byte(file.Body))
        if err != nil {
            fmt.Println(err)
        }
    }

    // 圧縮ファイルを閉じる
    err := w.Close()
    if err != nil {
        fmt.Println(err)
    }

    // 圧縮ファイルの内容をファイルに書き込む
    f, err := os.OpenFile("file.zip", os.O_CREATE|os.O_WRONLY, 0666)
    if err != nil {
        fmt.Println(err)
    }
    buf.WriteTo(f)
} 

上記のファイルを実行すると、次の図に示すように、現在のディレクトリに file.zip ファイルが生成されます。

 

zip アーカイブを読む

.zip アーカイブの読み取りは、アーカイブを作成するのと同じくらい簡単ですが、アーカイブにパス付きのファイル名が含まれている場合は、ディレクトリ構造を再構築する必要があります。

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

package main

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

func main() {
    // zipファイルを開く
    r、err:= zip.OpenReader("file.zip")
    if err!= nil {
        fmt.Printf(err.Error())
    }
    defer r.Close()

    // 圧縮ファイル内のファイルを反復処理して、内容を出力する
    for _、f: = range r.File {
        fmt.Printf("ファイル名:%s\n"、f.Name)
        rc、err:= f.Open()
        if err!= nil {
            fmt.Printf(err.Error())
        }
        _、err = io.CopyN(os.Stdout、rc、int64(f.UncompressedSize64))
        if err!= nil {
            fmt.Printf(err.Error())
        }
        rc.Close()
    }
} 

操作の結果は次のようになります。

go run main.go
ファイル名: Golang.txt
https://it-kiso.com/golang/

 

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

Go でファイルを読む方法を学びましょう!
https://www.youtube.com/watch?v=8uKtaYJlTzs&pp=ugMICgJqYRABGAHKBWEgR28g6KiA6Kqe44Gn44GuIHppcCDjgqLjg7zjgqvjgqTjg5Yg44OV44Kh44Kk44Or44Gu6Kqt44G_5Y-W44KK44GK44KI44Gz5pu444GN6L6844G_5pON5L2cJmhsPUpB
Go言語とは?|プログラミング言語のGo言語について3分でわかりやすく解説します【プログラミング初心者向け】