]> 127.0.0.1 Git - part/.git/commitdiff
1 v0.28.20241114142240
authorqydysky <qydysky@foxmail.com>
Thu, 14 Nov 2024 14:15:16 +0000 (22:15 +0800)
committerqydysky <qydysky@foxmail.com>
Thu, 14 Nov 2024 14:15:16 +0000 (22:15 +0800)
file/FileWR.go

index 3a639f28f695e5ef6d92f2852989f62053f2a65e..d0d54eaaae455f0817f1aedf4eac165faa77f7ce 100644 (file)
@@ -31,6 +31,7 @@ type File struct {
        file   *os.File
        wr     io.Writer
        rr     io.Reader
+       sr     io.Seeker
        l      sync.RWMutex
 }
 
@@ -245,6 +246,20 @@ func (t *File) Read(data []byte) (int, error) {
        return t.read().Read(data)
 }
 
+func (t *File) Seek(offset int64, whence int) (int64, error) {
+       t.getRWCloser()
+       if t.Config.AutoClose {
+               defer t.Close()
+       }
+
+       if !t.l.TryRLock() {
+               return 0, ErrFailToLock
+       }
+       defer t.l.RUnlock()
+
+       return t.seek().Seek(offset, whence)
+}
+
 // stop after untilBytes
 //
 // data not include untilBytes
@@ -705,3 +720,13 @@ func (t *File) read() io.Reader {
        }
        return t.rr
 }
+
+func (t *File) seek() io.Seeker {
+       if t.Config.AutoClose || t.rr == nil {
+               t.sr = io.Seeker(t.file)
+               if t.Config.Coder != nil {
+                       panic("no support")
+               }
+       }
+       return t.sr
+}