README
¶
go-unarr
Golang bindings for the unarr library from sumatrapdf.
unarr
is a decompression library and CLI for RAR, TAR, ZIP and 7z archives.
GoDoc
See https://pkg.go.dev/github.com/gen2brain/go-unarr
Build tags
extlib
- use external libunarr librarypkgconfig
- enable pkg-config (used withextlib
)static
- use static library (used withpkgconfig
)
Install CLI
go install github.com/gen2brain/go-unarr/cmd/unarr@latest
Example
unarr ./example.7z ./example/
Build
For one-off builds:
go build -o ./unarr ./cmd/unarr/*.go
For multi-platform cross-compile builds:
goreleaser --snapshot --skip-publish --rm-dist
Library Examples
Install Library
go get -v github.com/gen2brain/go-unarr
Open archive
a, err := unarr.NewArchive("test.7z")
if err != nil {
panic(err)
}
defer a.Close()
Read first entry from archive
err := a.Entry()
if err != nil {
panic(err)
}
data, err := a.ReadAll()
if err != nil {
panic(err)
}
List contents of archive
list, err := a.List()
if err != nil {
panic(err)
}
Read known filename from archive
err := a.EntryFor("filename.txt")
if err != nil {
panic(err)
}
data, err := a.ReadAll()
if err != nil {
panic(err)
}
Read first 8 bytes of the entry
err := a.Entry()
if err != nil {
panic(err)
}
data := make([]byte, 8)
n, err := a.Read(data)
if err != nil {
panic(err)
}
Read all entries from archive
for {
err := a.Entry()
if err != nil {
if err == io.EOF {
break
} else {
panic(err)
}
}
data, err := a.ReadAll()
if err != nil {
panic(err)
}
}
Extract contents of archive to destination path
_, err := a.Extract("/tmp/path")
if err != nil {
panic(err)
}
Documentation
¶
Overview ¶
Package unarr is a decompression library for RAR, TAR, ZIP and 7z archives.
Index ¶
- Variables
- type Archive
- func (a *Archive) Close() (err error)
- func (a *Archive) Entry() error
- func (a *Archive) EntryAt(off int64) error
- func (a *Archive) EntryFor(name string) error
- func (a *Archive) Extract(path string) (contents []string, err error)
- func (a *Archive) List() (contents []string, err error)
- func (a *Archive) ModTime() time.Time
- func (a *Archive) Name() string
- func (a *Archive) Offset() int64
- func (a *Archive) RawName() string
- func (a *Archive) Read(b []byte) (n int, err error)
- func (a *Archive) ReadAll() ([]byte, error)
- func (a *Archive) Seek(offset int64, whence int) (int64, error)
- func (a *Archive) Size() int
Constants ¶
This section is empty.
Variables ¶
var ( ErrOpenFile = errors.New("unarr: open file failed") ErrOpenMemory = errors.New("unarr: open memory failed") ErrOpenArchive = errors.New("unarr: no valid RAR, ZIP, 7Z or TAR archive") ErrEntry = errors.New("unarr: failed to parse entry") ErrEntryAt = errors.New("unarr: failed to parse entry at") ErrEntryFor = errors.New("unarr: failed to parse entry for") ErrSeek = errors.New("unarr: seek failed") ErrRead = errors.New("unarr: read failure") )
Functions ¶
This section is empty.
Types ¶
type Archive ¶
type Archive struct {
// contains filtered or unexported fields
}
Archive represents unarr archive
func NewArchive ¶
NewArchive returns new unarr Archive
func NewArchiveFromMemory ¶
NewArchiveFromMemory returns new unarr Archive from byte slice
func NewArchiveFromReader ¶
NewArchiveFromReader returns new unarr Archive from io.Reader
func (*Archive) Entry ¶
Entry reads the next archive entry.
io.EOF is returned when there is no more to be read from the archive.
func (*Archive) Offset ¶
Offset returns the stream offset of the current entry, for use with EntryAt
func (*Archive) RawName ¶ added in v0.1.2
RawName returns the name of the current entry as raw string
func (*Archive) Read ¶
Read tries to read 'b' bytes into buffer, advancing the read offset pointer.
Returns the actual number of bytes read.