def rmdirtree(path): """ Elimina un directorio y su contenido @param path: ruta a eliminar @type path: str @rtype: bool @return: devuelve False en caso de error """ path = encode(path) try: if path.lower().startswith("smb://"): for raiz, subcarpetas, ficheros in samba.walk(path, topdown=False): for f in ficheros: samba.remove(join(decode(raiz), decode(f))) for s in subcarpetas: samba.rmdir(join(decode(raiz), decode(s))) samba.rmdir(path) else: import shutil shutil.rmtree(path, ignore_errors=True) except: logger.error("ERROR al eliminar el directorio: %s" % path) logger.error(traceback.format_exc()) platformtools.dialog_notification("Error al eliminar el directorio", path) return False else: return not exists(path)
def rmdirtree(path): """ Elimina un directorio y su contenido @param path: ruta a eliminar @type path: str @rtype: bool @return: devuelve False en caso de error """ path = encode(path) try: if path.lower().startswith("smb://"): for raiz, subcarpetas, ficheros in samba.walk(path, topdown=False): for f in ficheros: samba.remove(join(decode(raiz),decode(f))) for s in subcarpetas: samba.rmdir(join(decode(raiz),decode(s))) samba.rmdir(path) else: import shutil shutil.rmtree(path, ignore_errors=True) except: logger.error("ERROR al eliminar el directorio: %s" %(path)) logger.error(traceback.format_exc()) platformtools.dialog_notification("Error al eliminar el directorio", path) return False else: return not exists(path)
def walk(top, topdown=True, onerror=None, vfs=True): """ Lista un directorio de manera recursiva @param top: Directorio a listar, debe ser un str "UTF-8" @type top: str @param topdown: se escanea de arriba a abajo @type topdown: bool @param onerror: muestra error para continuar con el listado si tiene algo seteado sino levanta una excepción @type onerror: bool ***El parametro followlinks que por defecto es True, no se usa aqui, ya que en samba no discrimina los links """ top = encode(top) if xbmc_vfs and vfs: for a, b, c in walk_vfs(top, topdown, onerror): # list(b) es para que haga una copia del listado de directorios # si no da error cuando tiene que entrar recursivamente en directorios con caracteres especiales yield a, list(b), c elif top.lower().startswith("smb://"): for a, b, c in samba.walk(top, topdown, onerror): # list(b) es para que haga una copia del listado de directorios # si no da error cuando tiene que entrar recursivamente en directorios con caracteres especiales yield decode(a), decode(list(b)), decode(c) else: for a, b, c in os.walk(top, topdown, onerror): # list(b) es para que haga una copia del listado de directorios # si no da error cuando tiene que entrar recursivamente en directorios con caracteres especiales yield decode(a), decode(list(b)), decode(c)
def walk(top, topdown=True, onerror=None, vfs=True): """ List a directory recursively @param top: Directory to list, must be a str "UTF-8" @type top: str @param topdown: scanned from top to bottom @type topdown: bool @param onerror: show error to continue listing if you have something set but raise an exception @type onerror: bool ***The followlinks parameter, which by default is True, is not used here, since in samba it does not discriminate links """ top = encode(top) if xbmc_vfs and vfs: for a, b, c in walk_vfs(top, topdown, onerror): # list (b) is for you to make a copy of the directory listing # if it doesn't give error when you have to recursively enter directories with special characters yield a, list(b), c elif top.lower().startswith("smb://"): for a, b, c in samba.walk(top, topdown, onerror): # list (b) is for you to make a copy of the directory listing # if it doesn't give error when you have to recursively enter directories with special characters yield decode(a), decode(list(b)), decode(c) else: for a, b, c in os.walk(top, topdown, onerror): # list (b) is for you to make a copy of the directory listing # if it doesn't give error when you have to recursively enter directories with special characters yield decode(a), decode(list(b)), decode(c)
def walk(top, topdown=True, onerror=None): """ Lista un directorio de manera recursiva @param top: Directorio a listar, debe ser un str "UTF-8" @type top: str @param topdown: se escanea de arriba a abajo @type topdown: bool @param onerror: muestra error para continuar con el listado si tiene algo seteado sino levanta una excepción @type onerror: bool ***El parametro followlinks que por defecto es True, no se usa aqui, ya que en samba no discrimina los links """ top = encode(top) if top.lower().startswith("smb://"): for a, b, c in samba.walk(top, topdown, onerror): # list(b) es para que haga una copia del listado de directorios # si no da error cuando tiene que entrar recursivamente en directorios con caracteres especiales yield decode(a), decode(list(b)), decode(c) else: for a, b, c in os.walk(top, topdown, onerror): # list(b) es para que haga una copia del listado de directorios # si no da error cuando tiene que entrar recursivamente en directorios con caracteres especiales yield decode(a), decode(list(b)), decode(c)
def rmdirtree(path, silent=False, vfs=True): """ Delete a directory and its contents @param path: path to remove @type path: str @rtype: bool @return: returns False on error """ path = encode(path) try: if xbmc_vfs and vfs: if not exists(path): return True if not path.endswith('/') and not path.endswith('\\'): path = join(path, ' ').rstrip() for raiz, subcarpetas, ficheros in walk(path, topdown=False): for f in ficheros: xbmcvfs.delete(join(raiz, f)) for s in subcarpetas: xbmcvfs.rmdir(join(raiz, s)) xbmcvfs.rmdir(path) elif path.lower().startswith("smb://"): for raiz, subcarpetas, ficheros in samba.walk(path, topdown=False): for f in ficheros: samba.remove(join(decode(raiz), decode(f))) for s in subcarpetas: samba.rmdir(join(decode(raiz), decode(s))) samba.rmdir(path) else: import shutil shutil.rmtree(path, ignore_errors=True) except: logger.error("ERROR deleting directory: %s" % path) if not silent: logger.error(traceback.format_exc()) platformtools.dialog_notification("ERROR deleting directory", path) return False else: return not exists(path)