ファイル処理においてzipファイルを解凍してから中身を取得することが一般的ですが、
今回は展開せずにzip内のファイル一覧を取得してみます。
Golangでは標準パッケージのarchive/zipを使用します。
zip内のファイル一覧を取得するコード
読み取り対象のzipファイルの内容
下記のようなTestZip.zipを用意しました
1 2 3 4 5 6 7 8 9 10 11 |
TestZip.zip │ ├─SubFolder1 │ └─text1.txt │ └─text2.txt │ ├─SubFolder2 │ └─text3.txt │ └─text4.txt │ └─text5.txt |
zip内にファイルとフォルダが圧縮されているので、フォルダ名とファイル名を表示してみます。
zipファイルの内容を一覧表示するコード
下記のコードはzipファイルの内容を展開せずに、ファイル一覧を表示するコードです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
package main import ( "archive/zip" "fmt" "log" ) func main() { files, err := showFilesInZip("TestZip.zip") if err != nil { log.Fatal(err) } for _, file := range files { fmt.Println(file) } } func showFilesInZip(zipName string) ([]string, error) { r, err := zip.OpenReader(zipName) if err != nil { return nil, err } defer r.Close() var fileNames []string for _, f := range r.File { fileNames = append(fileNames, f.Name) } return fileNames, nil } |
showFilesInZip関数内でzip.OpenReaderを使用して、指定したzipファイルを開いています。
もしファイルが見つからない場合や開く時にエラーが発生した場合はエラーを返します。
その後、取得したzipファイルの中身にアクセスするためにFileのスライスを使用します。
FileにはFileHeaderが埋め込まれているので、FileHeaderのNameフィールドを利用して
ファイル名を取得します。
最後に取得したファイル名をstringのスライスに格納して関数から返しています。
コードをを実行するとzipファイルを読み込み、zipファイル内のフォルダとファイル一覧が表示されます。
1 2 3 4 5 6 7 |
TestZip/SubFolder1/ TestZip/SubFolder1/text1.txt TestZip/SubFolder1/text2.txt TestZip/SubFolder2/ TestZip/SubFolder2/text3.txt TestZip/SubFolder2/text4.txt TestZip/text5.txt |
コメント