github.com/billybanfield/evergreen@v0.0.0-20170525200750-eeee692790f7/util/io.go (about)

     1  package util
     2  
     3  import (
     4  	"bytes"
     5  	"io"
     6  	"io/ioutil"
     7  )
     8  
     9  type SizeTrackingReader struct {
    10  	BytesRead uint64
    11  	io.Reader
    12  }
    13  
    14  func (str *SizeTrackingReader) Read(p []byte) (int, error) {
    15  	n, err := str.Reader.Read(p)
    16  	str.BytesRead += uint64(n)
    17  	return n, err
    18  }
    19  
    20  // WriteTempFile creates a temp file, writes the data to it, closes it and returns the file name.
    21  func WriteTempFile(prefix string, data []byte) (string, error) {
    22  	file, err := ioutil.TempFile("", prefix)
    23  	if err != nil {
    24  		return "", err
    25  	}
    26  	defer file.Close()
    27  
    28  	_, err = io.Copy(file, bytes.NewReader(data))
    29  	if err != nil {
    30  		return file.Name(), err
    31  	}
    32  	return file.Name(), nil
    33  }