[go] Go 언어의 경로를 이용한 파일 및 디렉토리 압축
- 개요
- 파일 및 디렉토리 압축하기
- 파일 및 디렉토리 압축 해제하기
- 결론
1. 개요
Go 언어를 사용하여 파일과 디렉토리를 압축하고 해제하는 방법을 배우겠습니다. archive/zip
패키지와 os
패키지를 사용하여 파일과 디렉토리를 압축하고 해제할 수 있습니다.
2. 파일 및 디렉토리 압축하기
아래의 예제 코드는 Go를 사용하여 파일 및 디렉토리를 압축하는 방법을 보여줍니다.
package main
import (
"archive/zip"
"os"
)
func main() {
fileToZip := "file.txt"
zipFile, err := os.Create("file.zip")
if err != nil {
panic(err)
}
defer zipFile.Close()
archive := zip.NewWriter(zipFile)
defer archive.Close()
file, err := os.Open(fileToZip)
if err != nil {
panic(err)
}
defer file.Close()
info, err := file.Stat()
if err != nil {
panic(err)
}
header, err := zip.FileInfoHeader(info)
if err != nil {
panic(err)
}
header.Method = zip.Deflate
writer, err := archive.CreateHeader(header)
if err != nil {
panic(err)
}
_, err = io.Copy(writer, file)
if err != nil {
panic(err)
}
}
위의 코드는 하나의 파일을 압축하는 예제이지만, 여러 파일을 동시에 압축할 수도 있습니다.
3. 파일 및 디렉토리 압축 해제하기
Go를 사용하여 압축된 파일이나 디렉토리를 해제하는 방법은 아래와 같습니다.
package main
import (
"archive/zip"
"os"
)
func main() {
zipFile, err := zip.OpenReader("file.zip")
if err != nil {
panic(err)
}
defer zipFile.Close()
for _, file := range zipFile.File {
zippedFile, err := file.Open()
if err != nil {
panic(err)
}
defer zippedFile.Close()
targetDir := "extracted"
targetPath := filepath.Join(targetDir, file.Name)
if file.FileInfo().IsDir() {
os.MkdirAll(targetPath, os.ModePerm)
} else {
os.MkdirAll(filepath.Dir(targetPath), os.ModePerm)
extractedFile, err := os.OpenFile(targetPath, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, file.Mode())
if err != nil {
panic(err)
}
defer extractedFile.Close()
_, err = io.Copy(extractedFile, zippedFile)
if err != nil {
panic(err)
}
}
}
}
위의 코드는 압축된 파일이나 디렉토리를 해제하는 코드입니다. 압축 파일 속의 모든 파일과 디렉토리를 해제할 수 있습니다.
4. 결론
위의 예제를 통해 Go 언어를 사용하여 파일과 디렉토리를 압축하고 해제하는 방법을 배웠습니다. archive/zip
패키지를 사용하여 파일과 디렉토리를 압축하고 해제할 수 있는 간단한 방법을 알아보았습니다. Go를 사용하여 다양한 파일 및 디렉토리 압축 관련 작업을 수행할 수 있습니다.
참고 문헌
- Go 공식 문서: https://golang.org/pkg/archive/zip/
- “Go in Practice” by Matt Butcher, Matt Farina, and Erik St. Martin (2016)