符号链接支持,可以通过mklink(Windows)或者ln -s (Linux)将其他路径下的文件夹链接到根目录下而无需将文件复制到根目录下.针对删除场景特殊处理,删除整个符号链接目录不会删除链接目录内文件,仅删除链接,在符号链接目录操作同普通目录

This commit is contained in:
wenyifan
2022-07-02 14:32:02 +08:00
parent 1ec66adda0
commit 3f38998fe5
7 changed files with 43 additions and 30 deletions

View File

@ -412,23 +412,35 @@ func (this *MatterDao) SizeByPuuidAndUserUuid(matterUuid string, userUuid string
}
//delete a file from db and disk.
func (this *MatterDao) Delete(matter *Matter) {
func (this *MatterDao) Delete(matter *Matter, symbolLinkDir bool, symbolLevel int) {
// recursive if dir
if matter.Dir {
stat, _ := os.Lstat(matter.AbsolutePath())
if stat.Mode()&os.ModeSymlink > 0 {
symbolLinkDir = true
}
if symbolLinkDir {
symbolLevel++
}
matters := this.FindByPuuidAndUserUuid(matter.Uuid, matter.UserUuid, nil)
for _, f := range matters {
this.Delete(f)
this.Delete(f, symbolLinkDir, symbolLevel)
}
//delete from db.
db := core.CONTEXT.GetDB().Delete(&matter)
this.PanicError(db.Error)
//delete dir from disk.
util.DeleteEmptyDir(matter.AbsolutePath())
if symbolLinkDir {
if symbolLevel == 0 {
os.Remove(matter.AbsolutePath())
}
} else {
//delete dir from disk.
util.DeleteEmptyDir(matter.AbsolutePath())
}
} else {
//delete from db.
@ -442,11 +454,12 @@ func (this *MatterDao) Delete(matter *Matter) {
this.bridgeDao.DeleteByMatterUuid(matter.Uuid)
//delete from disk.
err := os.Remove(matter.AbsolutePath())
if err != nil {
this.logger.Error("occur error when deleting file. %v", err)
if !symbolLinkDir {
err := os.Remove(matter.AbsolutePath())
if err != nil {
this.logger.Error("occur error when deleting file. %v", err)
}
}
}
}