티스토리 뷰

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

 

결과 화면

감사합니다 끝!

'Golang' 카테고리의 다른 글

Golang REST API 만들기  (0) 2021.08.05