67 lines
1.4 KiB
Go
67 lines
1.4 KiB
Go
package filesys
|
|
|
|
import (
|
|
"io"
|
|
"os"
|
|
"sync"
|
|
|
|
"github.com/88250/gulu"
|
|
"github.com/siyuan-note/filelock"
|
|
"github.com/siyuan-note/logging"
|
|
)
|
|
|
|
var writingFileLock = sync.Mutex{}
|
|
|
|
func LockWriteFile() {
|
|
writingFileLock.Lock()
|
|
}
|
|
|
|
func UnlockWriteFile() {
|
|
writingFileLock.Unlock()
|
|
}
|
|
|
|
func WriteFileSaferByReader(writePath string, reader io.Reader) (err error) {
|
|
writingFileLock.Lock()
|
|
defer writingFileLock.Unlock()
|
|
|
|
if err = gulu.File.WriteFileSaferByReader(writePath, reader, 0644); nil != err {
|
|
logging.LogErrorf("write file [%s] failed: %s", writePath, err)
|
|
return
|
|
}
|
|
return
|
|
}
|
|
|
|
func WriteFileSafer(writePath string, data []byte) (err error) {
|
|
writingFileLock.Lock()
|
|
defer writingFileLock.Unlock()
|
|
|
|
if err = gulu.File.WriteFileSafer(writePath, data, 0644); nil != err {
|
|
logging.LogErrorf("write file [%s] failed: %s", writePath, err)
|
|
return
|
|
}
|
|
return
|
|
}
|
|
|
|
func Copy(source, dest string) (err error) {
|
|
writingFileLock.Lock()
|
|
defer writingFileLock.Unlock()
|
|
|
|
filelock.ReleaseFileLocks(source)
|
|
if err = gulu.File.Copy(source, dest); nil != err {
|
|
logging.LogErrorf("copy [%s] to [%s] failed: %s", source, dest, err)
|
|
return
|
|
}
|
|
return
|
|
}
|
|
|
|
func RemoveAll(p string) (err error) {
|
|
writingFileLock.Lock()
|
|
defer writingFileLock.Unlock()
|
|
|
|
filelock.ReleaseFileLocks(p)
|
|
if err = os.RemoveAll(p); nil != err {
|
|
logging.LogErrorf("remove all [%s] failed: %s", p, err)
|
|
return
|
|
}
|
|
return
|
|
}
|