feat: try hard link first

This commit is contained in:
Simon Ding
2024-07-30 21:15:35 +08:00
parent 2c3fd89f2a
commit 3525d1bb83

View File

@@ -55,19 +55,23 @@ func (l *LocalStorage) Move(src, destDir string) error {
if info.IsDir() { if info.IsDir() {
os.Mkdir(destName, os.ModePerm) os.Mkdir(destName, os.ModePerm)
} else { //is file } else { //is file
if writer, err := os.OpenFile(destName, os.O_RDWR|os.O_CREATE|os.O_TRUNC, os.ModePerm); err != nil { if err := os.Link(path, destName); err != nil {
return errors.Wrapf(err, "create file %s", destName) log.Warnf("hard file error, will try copy file, source: %s, dest: %s", path, destName)
} else { if writer, err := os.OpenFile(destName, os.O_RDWR|os.O_CREATE|os.O_TRUNC, os.ModePerm); err != nil {
defer writer.Close() return errors.Wrapf(err, "create file %s", destName)
if f, err := os.OpenFile(path, os.O_RDONLY, os.ModePerm); err != nil { } else {
return errors.Wrapf(err, "read file %v", path) defer writer.Close()
} else { //open success if f, err := os.OpenFile(path, os.O_RDONLY, os.ModePerm); err != nil {
defer f.Close() return errors.Wrapf(err, "read file %v", path)
_, err := io.Copy(writer, f) } else { //open success
if err != nil { defer f.Close()
return errors.Wrap(err, "transmitting data error") _, err := io.Copy(writer, f)
if err != nil {
return errors.Wrap(err, "transmitting data error")
}
} }
} }
} }
} }
log.Infof("file copy complete: %v", destName) log.Infof("file copy complete: %v", destName)