Golang
Golang 파일 압축하기
채우는중
2021. 9. 2. 20:52
오늘은 Golang으로 파일을 압축하는 방법을 알아보겠습니다. 내용은 아래 소스파일의 주석을 확인해주세요.
package main
import(
"archive/tar"
"path/filepath"
)
func compress(tarWriter *tar.Writer, dir *os.File) error {
// 0을 넘겨 모든 파일 정보를 받아옵니다.
files, _ := dir.Readdir(0)
for _, fileInfo := range files {
// 파일을 가져오고
file, err := os.Open(dir.Name() + string(filepath.Separator) + fileInfo.Name())
if err != nil {
return err
}
// 파일이 디렉터리일 경우
if fileInfo.IsDir() {
// 압축파일의 Writer와 바로 위에서 가져온 파일을 넘겨 아래의 모든 파일까지 압축합니다.
compress(tarWriter, file)
// 위에서 모든 파일을 압축했으니 다음 파일로 넘어간다.
continue
}
// file header
header := new(tar.Header)
header.Name = file.Name()
header.Size = fileInfo.Size()
header.Mode = int64(fileInfo.Mode())
header.ModTime = fileInfo.ModTime()
// 압축파일에 쓰기.
err = tarWriter.WriteHeader(header)
if err != nil {
return err
}
_, err = io.Copy(tarWriter, file)
file.Close()
if err != nil {
return err
}
}
return nil
}
func main() {
tarFile, _ := os.Create("file path.tar")
defer tarFile.Close()
tarWriter := tar.NewWriter(tarFile)
defer tarWriter.Close()
dir, _ := os.Open("directory path")
defer dir.Close()
compress(tarWriter, dir)
}
결과 화면
감사합니다 끝!