AICollection Help

File Compressor

To create a file compressor program in Go, follow these steps:

Step 1: Initialize the Go Module

First, create a new directory for your project and initialize the Go module.

mkdir filecompressor cd filecompressor go mod init github.com/username/filecompressor

Step 2: Install Dependencies

You will need the compress/gzip package for Gzip compression.

Step 3: Create the compressor.go File

Create a lib/compressor.go file to handle the compression and decompression functionality.

// compressor.go package lib import ( "compress/gzip" "io" "os" ) // CompressFile compresses the given file using Gzip. func CompressFile(source, target string) error { srcFile, err := os.Open(source) if err != nil { return err } defer srcFile.Close() tgtFile, err := os.Create(target) if err != nil { return err } defer tgtFile.Close() writer := gzip.NewWriter(tgtFile) defer writer.Close() _, err = io.Copy(writer, srcFile) return err } // DecompressFile decompresses the given Gzip file. func DecompressFile(source, target string) error { srcFile, err := os.Open(source) if err != nil { return err } defer srcFile.Close() reader, err := gzip.NewReader(srcFile) if err != nil { return err } defer reader.Close() tgtFile, err := os.Create(target) if err != nil { return err } defer tgtFile.Close() _, err = io.Copy(tgtFile, reader) return err }

Step 4: Create the main.go File

Create a main.go file to use the compression and decompression functionality.

// main.go package main import ( "flag" "fmt" "os" "github.com/username/filecompressor/lib" ) func main() { compress := flag.Bool("compress", false, "Compress the file") decompress := flag.Bool("decompress", false, "Decompress the file") source := flag.String("source", "", "Source file path") target := flag.String("target", "", "Target file path") flag.Parse() if *source == "" || *target == "" { fmt.Println("Usage: file_compressor --compress|--decompress --source <source_file> --target <target_file>") os.Exit(1) } var err error if *compress { err = lib.CompressFile(*source, *target) } else if *decompress { err = lib.DecompressFile(*source, *target) } else { fmt.Println("Specify either --compress or --decompress") os.Exit(1) } if err != nil { fmt.Printf("Operation failed: %v\n", err) os.Exit(1) } fmt.Println("Operation successful") }

Step 5: Run the Program

Run the program using the go run command.

To compress a file:

go run main.go --compress --source example.txt --target example.txt.gz

To decompress a file:

go run main.go --decompress --source example.txt.gz --target example.txt

Replace example.txt and example.txt.gz with the paths to your source and target files. This will compress or decompress the file as specified.

Last modified: 08 January 2025