code: func (fst *fileTorrentImplIO) readFileAt(fi metainfo.FileInfo, b []byte, off int64) (n int, err error) {
  	f, err := os.Open(fst.fts.fileInfoName(fi))
  	if os.IsNotExist(err) {
  		// File missing is treated the same as a short file.
  		err = io.EOF
  		return
  	}
  	if err != nil {
  		return
  	}
  	defer f.Close()
  	// Limit the read to within the expected bounds of this file.
  	if int64(len(b)) > fi.Length-off {
  		b = b[:fi.Length-off]
  	}
  	for off < fi.Length && len(b) != 0 {
  		n1, err1 := f.ReadAt(b, off)
  		b = b[n1:]
  		n += n1
  		off += int64(n1)
  		if n1 == 0 {
  			err = err1
  			break
  		}
  	}
  	return
  }
docs: // Returns EOF on short or missing file.