96 lines
1.4 KiB
Go
96 lines
1.4 KiB
Go
package blefs
|
|
|
|
import (
|
|
"path/filepath"
|
|
"strings"
|
|
)
|
|
|
|
func (blefs *FS) RemoveAll(path string) error {
|
|
if path == "" {
|
|
return nil
|
|
}
|
|
|
|
if filepath.Clean(path) == "/" {
|
|
return ErrNoRemoveRoot
|
|
}
|
|
|
|
fi, err := blefs.Stat(path)
|
|
if err != nil {
|
|
return nil
|
|
}
|
|
|
|
if fi.IsDir() {
|
|
return blefs.removeAllChildren(path)
|
|
} else {
|
|
err = blefs.Remove(path)
|
|
|
|
var code int8
|
|
if err, ok := err.(FSError); ok {
|
|
code = err.Code
|
|
}
|
|
|
|
if err != nil && code != -2 {
|
|
return err
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (blefs *FS) removeAllChildren(path string) error {
|
|
list, err := blefs.ReadDir(path)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
for _, entry := range list {
|
|
name := entry.Name()
|
|
|
|
if name == "." || name == ".." {
|
|
continue
|
|
}
|
|
entryPath := filepath.Join(path, name)
|
|
|
|
if entry.IsDir() {
|
|
err = blefs.removeAllChildren(entryPath)
|
|
} else {
|
|
err = blefs.Remove(entryPath)
|
|
}
|
|
|
|
var code int8
|
|
if err, ok := err.(FSError); ok {
|
|
code = err.Code
|
|
}
|
|
|
|
if err != nil && code != -2 {
|
|
return err
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (blefs *FS) MkdirAll(path string) error {
|
|
if path == "" || path == "/" {
|
|
return nil
|
|
}
|
|
|
|
splitPath := strings.Split(path, "/")
|
|
for i := 1; i < len(splitPath); i++ {
|
|
curPath := strings.Join(splitPath[0:i+1], "/")
|
|
|
|
err := blefs.Mkdir(curPath)
|
|
|
|
var code int8
|
|
if err, ok := err.(FSError); ok {
|
|
code = err.Code
|
|
}
|
|
|
|
if err != nil && code != -17 {
|
|
return err
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|