Autor |
Mensaje |
drjuano
Aprendiz
Registrado: Marzo 2011
Mensajes: 69
Edad: 42
|
Borrar Recursivamente
Como puedo hacer un código que elimine un directorio que está lleno. He estado pensando y buscando en Google, pero para evitar macanas prefiero consultarlo a los que saben. Gracias por su ayuda.
|
#1 Martes, 12 Marzo 2013, 20:45 |
|
|
jsbsan
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4175
Edad: 51 Ubicación: dos hermanas, sevilla
|
Re: Borrar Recursivamente
drjuano:
Este código te puede valer...
|
#2 Martes, 12 Marzo 2013, 21:20 |
|
|
jguardon
Administrador
Registrado: Septiembre 2009
Mensajes: 2708
Edad: 57 Ubicación: Granada
|
Re: Borrar Recursivamente
Eso es lo mismo que había pensado, pero hay que hacer la función recursiva porque bajo el directorio a borrar puede haber más directorios y subdirectorios. Hay que usar las instrucciones RDir para listar contenido de directorios y RMDir para borrar directorios vacíos.
La opción cutre es hacer un shell con rm -rf pero mucho cuidadín con eso...
Saludos
=================== Jesús Guardón
Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".
"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
|
#3 Martes, 12 Marzo 2013, 21:30 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
Re: Borrar Recursivamente
Esta función te copia un directorio a otro lugar de forma recursiva. No es lo que pides, pero con la misma lógica no te puede costar mucho el adaptarlo al borrado:
Public Sub copia_dir(path_origen As String, path_destino As String, Optional tipo As String)
Dim arDir As String[]
Dim arFile As String[]
Dim nombredir, nombrefile As String
Dim nombresolo As String
Dim n As Integer
If Not tipo Then tipo = "*"
If Not Exist(path_destino) Then
Mkdir path_destino
Endif
arfile = Dir(path_origen, tipo, gb.file) 'extraemos los ficheros
For Each nombrefile In arfile 'los copiamos
Try Copy path_origen &/ nombrefile To path_destino &/ nombrefile
Next
n = InStr(path_origen, "/")
If n > 0 Then
nombresolo = Right(path_origen, - n + 1)
Else
nombresolo = path_origen
Endif
ardir = Dir(path_origen, "*", gb.Directory)
For Each nombredir In arDir 'extraemos los subdirectorios
copia_dir(path_origen &/ nombredir, path_destino &/ nombredir) 'usamos la recursividad
Next
End
|
#4 Martes, 12 Marzo 2013, 21:52 |
|
|
sebikul
Sebastian
Programador
Registrado: Julio 2012
Mensajes: 113
Edad: 30 Ubicación:
|
Re: Borrar Recursivamente
Puedes usar este modulo que es parte de un proyecto mio. Tiene detección de errores y es realmente fácil de usar, Cleaner.Clean(path).
Espero que te sirva!
|
#5 Viernes, 15 Marzo 2013, 10:49 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
Re: Borrar Recursivamente
Guapo ese "Mundus", Sebikul.
|
#6 Viernes, 15 Marzo 2013, 12:03 |
|
|
sebikul
Sebastian
Programador
Registrado: Julio 2012
Mensajes: 113
Edad: 30 Ubicación:
|
Re: Borrar Recursivamente
Guapo ese "Mundus", Sebikul.
Gracias! Creció mucho mas de lo que esperaba, aunque ahora no esta muy activo. No he conseguido gente que se involucre, y la verdad es que estar viendo aplicación por aplicación donde se guardan los archivos no es fácil. Gracias a este proyecto aprendí mucho de lo que se ahora sobre gambas y empaquetado en Debian.
|
#7 Viernes, 15 Marzo 2013, 19:46 |
|
|
drjuano
Aprendiz
Registrado: Marzo 2011
Mensajes: 69
Edad: 42
|
Re: Borrar Recursivamente
Gracias por la data. Voy a probar algunos codigos.
|
#8 Jueves, 04 Abril 2013, 00:58 |
|
|
drjuano
Aprendiz
Registrado: Marzo 2011
Mensajes: 69
Edad: 42
|
Re: Borrar Recursivamente
Esta función te copia un directorio a otro lugar de forma recursiva. No es lo que pides, pero con la misma lógica no te puede costar mucho el adaptarlo al borrado:
Public Sub copia_dir(path_origen As String, path_destino As String, Optional tipo As String)
Dim arDir As String[]
Dim arFile As String[]
Dim nombredir, nombrefile As String
Dim nombresolo As String
Dim n As Integer
If Not tipo Then tipo = "*"
If Not Exist(path_destino) Then
Mkdir path_destino
Endif
arfile = Dir(path_origen, tipo, gb.file) 'extraemos los ficheros
For Each nombrefile In arfile 'los copiamos
Try Copy path_origen &/ nombrefile To path_destino &/ nombrefile
Next
n = InStr(path_origen, "/")
If n > 0 Then
nombresolo = Right(path_origen, - n + 1)
Else
nombresolo = path_origen
Endif
ardir = Dir(path_origen, "*", gb.Directory)
For Each nombredir In arDir 'extraemos los subdirectorios
copia_dir(path_origen &/ nombredir, path_destino &/ nombredir) 'usamos la recursividad
Next
End
Éste código me ha servido. Después de mucho tiempo lo estoy analizando (no es fácil para mi ). No comprendo bien la parte dónde se define la variable nombresolo. La variable no se usa en ninguna parte, podrías hechar un poco de luz al caso? Gracias!
|
#9 Sabado, 13 Abril 2013, 22:36 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
Re: Borrar Recursivamente
Citar: Éste código me ha servido. Después de mucho tiempo lo estoy analizando (no es fácil para mi ). No comprendo bien la parte dónde se define la variable nombresolo. La variable no se usa en ninguna parte, podrías hechar un poco de luz al caso? Gracias!
Código fósil. Es lo que tiene esto del copiar y pegar. La función original de la que extraje ese código hacía más cosas que no venían al caso. Al quitarlas se me coló lo del nombresolo. Puedes borrarlo sin problemas.
Pido disculpas por el despiste...
|
#10 Domingo, 14 Abril 2013, 07:43 |
|
|
|