Golang 删除文件并递归删除空目录
目的:删除文件之后,如果目录为空,递归删除为空的目录。
svr.dataDir指目录的最外层,递归删除目录的时候判断到这一层即可。
eg:/Users/danny/data
func deleteFileOnDisk(localPath string) {
log.Debugf("remove file: %s", localPath)
if err := os.Remove(localPath); err != nil {
log.Error(err)
}
dirsList := make([]string, 0, 0)
for dir := path.Dir(localPath); dir != svr.dataDir && len(dir) > len(svr.dataDir); dir = path.Dir(dir) {
dirsList = append(dirsList, dir)
}
sort.StringSlice(dirsList).Sort()
for i := len(dirsList) - 1; i >= 0; i-- {
f, err := os.Open(dirsList[i])
if err != nil {
log.Error(err)
}
fs, err2 := f.Readdirnames(1)
if err2 == io.EOF && (fs == nil || len(fs) == 0) {
f.Close()
log.Debugf("remove dir: %s", dirsList[i])
if err := os.Remove(dirsList[i]); err != nil {
log.Error(err)
}
continue
} else if err2 != nil {
log.Error(err2)
}
f.Close()
}
}