From: qydysky Date: Thu, 14 Nov 2024 14:15:16 +0000 (+0800) Subject: 1 X-Git-Tag: v0.28.20241114142240 X-Git-Url: http://127.0.0.1:8081/?a=commitdiff_plain;h=4aba9148ce73c816649e1319476f9eb1131c48aa;p=part%2F.git 1 --- diff --git a/file/FileWR.go b/file/FileWR.go index 3a639f2..d0d54ea 100644 --- a/file/FileWR.go +++ b/file/FileWR.go @@ -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 +}