Remover directorios, urgente!!

[email protected]
19 de Enero del 2004
Estoy intentando borrar un directorio desde código VB con la instrucción RmDir "C:borrar_directorio", pero da un error 75 "Error de acceso a ruta o archivo", será porque el directorio contiene otros directorios y archivos??

Gracias!!! [email protected]

gucesoft
19 de Enero del 2004
EL ERROR QUE INDICAS AL UTILIZAR LA INSTRUCCION RMDIR, COMO BIEN DICES ES POR QUE DICHA CARPETA CONTENGA ARCHIVOS.
UNA SOLUCION SERIA COMBINAR RMDIR CON LA INSTRUCCION QUE TE ACONSEJA 'MEDAFLOJERA', KILL.
PRIMERO ELIMINAS TODOS LOS ARCHIVOS DE LA CARPETA CON KILL RUTA*.* Y A CONTINUACION ELIMINAS LA CARPETA CON RMDIR RUTA.
PERO TE PODRIAS ENCONTRAR CON EL PROBLEMA DE QUE LA CARPETA A ELIMINAR CONTUBIERA NO SOLO ARCHIVOS, SI NO OTRAS CARPETAS ENTONCES LA COSA SE PUEDE COMPLICAR MUCHO.
UNA SOLUCIÓN PARA ELIMINAR UNA CARPETA ES UNA FUNCION API DE LA SHELL DE WINDOWS QUE DE ENTRE MUCHAS UTILIDADES QUE POSEE TIENE LA CAPACIDAD DE ELIMINAR UNA CARPETA (SHFileOperation).

PARA UTILIZARLA DEBERAS DECLARAR LA FUNCION:
Public Declare Function SHFileOperation Lib "shell32.dll" Alias "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long

ESTA FUNCION CONTIENE UN UNICO PARAMETRO, DICHO PARAMETRO, SHFILEOPSTRUCT, ES UNA ESTRUCTURA QUE SE DECLARA COMO SIGUE:
Public Type SHFILEOPSTRUCT
hWnd As Long
wFunc As Long
pFrom As String
pTo As String
fFlags As Integer
fAnyOperationsAborted As Boolean
hNameMappings As Long
lpszProgressTitle As String
End Type

NECESITAREMOS DOS CONSTANTES:
Public Const FO_DELETE = &H3
Public Const FOF_NOCONFIRMATION = &H10

LA FORMA MAS SENCILLA DE UTILIZAR TODO ESTO ES INCLUIRLO EN UNA FUNCION QUE HAREMOS COMO SIGUE:
Public Function BorrarCarpeta (Ruta As String) As Boolean
Dim SHCarpeta As SHFILEOPSTRUCT

On Error Resume Next

With SHCarpeta
.wFunc = FO_DELETE
.pFrom = Ruta
.fFlags = FOF_NOCONFIRMATION
End With

SHFileOperation SHCarpeta

End Function

SI LO QUE QUEREMOS ES ELIMINAR LA CARPETA CON NOMBRE GAMMA, CUYA RUTA COMPLETA ES:
C:ALFABETAGAMMA
NO TENDREMOS MAS QUE UTILIZAR LA FUNCION QUE HEMOS CREADO COMO SIGUE
BorrarCarpeta "C:ALFABETAGAMMA"

PODRAS OBSERVAR COMO ELIMINARA DICHA CARPETA INDEPENDIENTEMENTE QUE CONTENGA O NO ALGO, YA SEAN OTRAS CARPETA U ARCHIVOS.

[email protected]
19 de Enero del 2004
Muchas Gracias por tu ayuda, gucesoft!!

sdemingo
19 de Enero del 2004
Otra forma de eliminar el error de solo lectura....

SetAttr ruta, vbNormal

Saludos
sdemingo

jichu69
19 de Enero del 2004
si no me confundo con el codigo rmdir, lo que haces es cambiarle el nombre al directorio, te recomiendo que pruebes con delete (no estoy muy seguro)
y el error seguramente será devido a que a que la ruta o el nombre de la carpeta no son correcto

[email protected]
19 de Enero del 2004
Hola!
No, la instrucción y la ruta son correctas, pero ya ví que el problema es porque el directorio que quiero borrar no está vacío...
hay alguna manera de eliminarlo con todo su contenido???
Igual, gracias!!
:)

medaflojera
19 de Enero del 2004
usa kill c:*.*
o kill c:ruta*.*
si te causa error es por que estan protejidos osea solo lectura