# zip\_files v1

### Repository

{% embed url="<https://github.com/metadiv-io/zip_files/tree/v1>" %}

### Installation

```bash
go get -u github.com/metadiv-io/zip_files
```

### Usage

#### Creating ZIP Archives

```go
zipper := zip_files.New()

// Add files to the archive
zipper.AddFile("hello.txt", []byte("Hello, World!"))
zipper.AddFile("data.json", []byte(`{"message": "Hello from JSON"}`))

// Get the number of files
count := zipper.CountFiles() // returns 2

// Get list of file names
files := zipper.Files() // returns []string{"hello.txt", "data.json"}

// Create the ZIP archive
zipBytes, err := zipper.Zip()
if err != nil {
    log.Fatal(err)
}

// Now zipBytes contains the ZIP archive data
// You can write it to a file or send it over network
```

#### Extracting ZIP Archives

```go
// Assuming you have ZIP archive data in zipBytes
files, err := zip_files.Unzip(zipBytes)
if err != nil {
    log.Fatal(err)
}

// files is now a map[string][]byte containing the extracted files
// Access files by their names
helloContent := files["hello.txt"] // []byte("Hello, World!")
jsonContent := files["data.json"]  // []byte(`{"message": "Hello from JSON"}`)
```

#### API Reference

**`New() *Zipper`**

Creates a new Zipper instance for creating ZIP archives.

**`AddFile(filename string, file []byte)`**

Adds a file to the ZIP archive with the specified filename and content.

**`CountFiles() int`**

Returns the number of files currently added to the archive.

**`Files() []string`**

Returns a slice of filenames currently added to the archive.

**`Zip() ([]byte, error)`**

Creates and returns the ZIP archive as a byte slice.
