func (pack *PackDir) Close() error {
	return nil
}
Close file handle. This function must be called only for root object,
not subdirectories.
io.Closer implementation.
package fsys
import (
	"io"
	"io/fs"
	"os"
	"path"
	"strings"
	"github.com/schwarzlichtbezirk/wpk"
)
type ChunkFile struct {
	wpk.FileReader
	tags wpk.TagSlice  
	wpkf *os.File
}
func NewChunkFile(fname string, ts wpk.TagSlice) (f *ChunkFile, err error) {
	var wpkf *os.File
	if wpkf, err = os.Open(fname); err != nil {
		return
	}
	f = &ChunkFile{
		tags:       ts,
		FileReader: io.NewSectionReader(wpkf, ts.Offset(), ts.Size()),
		wpkf:       wpkf,
	}
	return
}
func (f *ChunkFile) Stat() (fs.FileInfo, error) {
	return f.tags, nil
}
func (f *ChunkFile) Close() error {
	return f.wpkf.Close()
}
type PackDir struct {
	*wpk.Package
	ftt       []byte
	fname     string
	workspace string  
}
func (pack *PackDir) OpenTags(ts wpk.TagSlice) (wpk.NestedFile, error) {
	return NewChunkFile(pack.fname, ts)
}
func (pack *PackDir) NamedTags(key string) (wpk.TagSlice, bool) {
	if tagpos, is := pack.Tags[key]; is {
		return pack.ftt[tagpos-wpk.OFFSET(pack.FTTOffset()):], true
	} else {
		return nil, false
	}
}
func OpenImage(fname string) (pack *PackDir, err error) {
	pack = &PackDir{Package: &wpk.Package{}}
	pack.workspace = "."
	pack.fname = fname
	var filewpk *os.File
	if filewpk, err = os.Open(fname); err != nil {
		return
	}
	defer filewpk.Close()
	if err = pack.Read(filewpk); err != nil {
		return
	}
	pack.ftt = make([]byte, pack.FTTSize())
	if _, err = filewpk.Seek(pack.FTTOffset(), io.SeekStart); err != nil {
		return
	}
	if _, err = filewpk.Read(pack.ftt); err != nil {
		return
	}
	return
}