}
defer to.Unlock()
- return transfer(t, to, byteInSec)
+ return transferIO(t.read(), to.write(), byteInSec)
+}
+
+func (t *File) CopyToIoWriter(to io.Writer, byteInSec int64, tryLock bool) error {
+ t.getRWCloser()
+ if t.Config.AutoClose {
+ defer t.Close()
+ }
+
+ if !t.TryRLock() {
+ return ErrFailToLock
+ }
+ defer t.RUnlock()
+
+ return transferIO(t.read(), to, byteInSec)
}
func (t *File) Write(data []byte, tryLock bool) (int, error) {
return nil
}
+// deprecated
func transfer(r *File, w *File, byteInSec int64) (e error) {
if byteInSec > 0 {
limit := l.New(1, 1000, -1)
return nil
}
+func transferIO(r io.Reader, w io.Writer, byteInSec int64) (e error) {
+ if byteInSec > 0 {
+ limit := l.New(1, 1000, -1)
+ defer limit.Close()
+
+ buf := make([]byte, byteInSec)
+ for {
+ n, err := r.Read(buf)
+ if n != 0 {
+ w.Write(buf[:n])
+ } else if err != nil {
+ e = err
+ break
+ }
+ limit.TO()
+ }
+ } else {
+ _, e = io.Copy(w, r)
+ }
+
+ return nil
+}
+
func (t *File) write() io.Writer {
if t.Config.AutoClose || t.wr == nil {
t.wr = io.Writer(t.file)