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 }