[![GoDoc](https://godoc.org/github.com/dsoprea/go-utility/filesystem?status.svg)](https://godoc.org/github.com/dsoprea/go-utility/filesystem)
[![Build Status](https://travis-ci.org/dsoprea/go-utility.svg?branch=master)](https://travis-ci.org/dsoprea/go-utility)
[![Coverage Status](https://coveralls.io/repos/github/dsoprea/go-utility/badge.svg?branch=master)](https://coveralls.io/github/dsoprea/go-utility?branch=master)
[![Go Report Card](https://goreportcard.com/badge/github.com/dsoprea/go-utility)](https://goreportcard.com/report/github.com/dsoprea/go-utility)

# bounceback

An `io.ReadSeeker` and `io.WriteSeeker` that returns to the right place before
reading or writing. Useful when the same file resource is being reused for reads
or writes throughout that file.

# list_files

A recursive path walker that supports filters.

# seekable_buffer

A memory structure that satisfies `io.ReadWriteSeeker`.

# copy_bytes_between_positions

Given an `io.ReadWriteSeeker`, copy N bytes from one position to an earlier
position.

# read_counter, write_counter

Wrap `io.Reader` and `io.Writer` structs in order to report how many bytes were
transferred.

# readseekwritecloser

Provides the ReadWriteSeekCloser interface that combines a RWS and a Closer.
Also provides a no-op wrapper to augment a plain RWS with a closer.

# boundedreadwriteseek

Wraps a ReadWriteSeeker such that no seeks can be at an offset less than a
specific-offset.

# calculateseek

Provides a reusable function with which to calculate seek offsets.

# progress_wrapper

Provides `io.Reader` and `io.Writer` wrappers that also trigger callbacks after
each call. The reader wrapper also invokes the callback upon EOF.

# does_exist

Check whether a file/directory exists using a file-path.

# graceful_copy

Do a copy but correctly handle short-writes and reads that might return a non-
zero read count *and* EOF.

# readseeker_to_readerat

A wrapper that allows an `io.ReadSeeker` to be used as a `io.ReaderAt`.

# simplefileinfo

An implementation of `os.FileInfo` to support testing.