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 }