mirror of
https://github.com/avelino/awesome-go.git
synced 2024-11-14 16:42:23 +00:00
65 lines
1.2 KiB
Go
65 lines
1.2 KiB
Go
package main
|
|
|
|
import (
|
|
"archive/zip"
|
|
"io"
|
|
"log"
|
|
"os"
|
|
"path/filepath"
|
|
)
|
|
|
|
func main() {
|
|
|
|
/*
|
|
Extract Archived Files
|
|
*/
|
|
|
|
// Create a reader out of the zip archive
|
|
zipReader, err := zip.OpenReader("test.zip")
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
defer zipReader.Close()
|
|
|
|
// Iterate through each file/dir found in
|
|
for _, file := range zipReader.Reader.File {
|
|
// Open the file inside the zip archive
|
|
// like a normal file
|
|
zippedFile, err := file.Open()
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
defer zippedFile.Close()
|
|
|
|
targetDir := "./"
|
|
extractedFilePath := filepath.Join(
|
|
targetDir,
|
|
file.Name,
|
|
)
|
|
|
|
if file.FileInfo().IsDir() {
|
|
log.Println("Creating directory:", extractedFilePath)
|
|
os.MkdirAll(extractedFilePath, file.Mode())
|
|
} else {
|
|
// Extract regular file since not a directory
|
|
log.Println("Extracting file:", file.Name)
|
|
|
|
// Open an output file for writing
|
|
outputFile, err := os.OpenFile(
|
|
extractedFilePath,
|
|
os.O_WRONLY|os.O_CREATE|os.O_TRUNC,
|
|
file.Mode(),
|
|
)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
defer outputFile.Close()
|
|
|
|
_, err = io.Copy(outputFile, zippedFile)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
}
|
|
}
|
|
}
|