elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  [Source] Eliminar carpetas, subcarpetas y archivos
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Source] Eliminar carpetas, subcarpetas y archivos  (Leído 6,550 veces)
nhaalclkiemr


Desconectado Desconectado

Mensajes: 1.678


Máximo exponente 9DB9F1AEED2FADBDE 997BBE20FEDA92


Ver Perfil WWW
[Source] Eliminar carpetas, subcarpetas y archivos
« en: 14 Febrero 2008, 18:46 pm »

Weno pues he hecho una funcion sencilla para borrar carpetas y sus archivos, con la posibilidad de eliminar sus subcarpetas. La funcion devolverá 0 si no se consiguió eliminar a carpeta original, si la carpeta se consiguó eliminar correctamente devolverá un valor distinto de 0. Fijate en que para borrar una carpeta primero hay que borrar todos sus archivos, si cualquier archivo de cualquier subcarpeta no se consiguió eliminar (por ejemplo por estár en uso) no se podrá borrar la carpeta original y la funcion devolverá 0, aunke puede que borrase la mayor parte de los archivos igualmente...

Si seleccionas eliminar las subcarpetas (que es lo normal) se borrarán todos los archivos y subcarpetas de la misma, y por ultimo se borra tambien la carpeta.

Si no seleccionas borrar las subcarpetas solamente se borran los archivos de la carpeta elegida y posteriormente se intenta borrar la carpeta, pero si existen subcarpetas está nunca se conseguirá eliminar (ya que hay subcarpetas dentro) y la funcion devolverá un valor distinto de 0.

Weno hice dos funciones, una usando las APIs y otra usando las funciones de VB:

Código
  1. Option Explicit
  2.  
  3. Private Declare Function DeleteFile Lib "kernel32" Alias "DeleteFileA" (ByVal lpFileName As String) As Long
  4. Private Declare Function RemoveDirectory Lib "kernel32" Alias "RemoveDirectoryA" (ByVal lpPathName As String) As Long
  5.  
  6. Public Function ElimFolder(ByVal sDir As String, ByVal WithSubfolders As Boolean) As Long
  7. Dim sFile As String
  8. Dim counD As Long, counF As Long
  9. Dim i As Long
  10. ReDim sDirs(0 To 0) As String
  11. ReDim sFiles(0 To 0) As String
  12. On Error Resume Next
  13. If IsDir(sDir) Then
  14.    If Right(sDir, 1) <> "\" Then sDir = sDir & "\"
  15.    sFile = Dir(sDir, 55)
  16.    Do
  17.        If IsDir(sDir & sFile) Then
  18.            If (sFile <> ".") And (sFile <> "..") Then
  19.                ReDim Preserve sDirs(0 To counD) As String
  20.                sDirs(counD) = sDir & sFile
  21.                counD = counD + 1
  22.            End If
  23.        Else
  24.            ReDim Preserve sFiles(0 To counF) As String
  25.            sFiles(counF) = sFile
  26.            counF = counF + 1
  27.        End If
  28.        sFile = Dir
  29.    Loop While sFile <> vbNullString
  30.    If sFiles(0) <> vbNullString Then
  31.        For i = 0 To UBound(sFiles)
  32.            DeleteFile sDir & sFiles(i)
  33.        Next i
  34.    End If
  35.    If WithSubfolders Then
  36.        If sDirs(0) <> vbNullString Then
  37.            For i = 0 To UBound(sDirs)
  38.                ElimFolder sDirs(i), True
  39.            Next i
  40.        End If
  41.    End If
  42.    ElimFolder = RemoveDirectory(sDir)
  43. End If
  44. End Function



Código
  1. Option Explicit
  2.  
  3. Public Function ElimFolder(ByVal sDir As String, ByVal WithSubfolders As Boolean) As Long
  4. Dim sFile As String
  5. Dim counD As Long, counF As Long
  6. Dim i As Long
  7. ReDim sDirs(0 To 0) As String
  8. ReDim sFiles(0 To 0) As String
  9. On Error Resume Next
  10. If IsDir(sDir) Then
  11.    If Right(sDir, 1) <> "\" Then sDir = sDir & "\"
  12.    sFile = Dir(sDir, 55)
  13.    Do
  14.        If IsDir(sDir & sFile) Then
  15.            If (sFile <> ".") And (sFile <> "..") Then
  16.                ReDim Preserve sDirs(0 To counD) As String
  17.                sDirs(counD) = sDir & sFile
  18.                counD = counD + 1
  19.            End If
  20.        Else
  21.            ReDim Preserve sFiles(0 To counF) As String
  22.            sFiles(counF) = sFile
  23.            counF = counF + 1
  24.        End If
  25.        sFile = Dir
  26.    Loop While sFile <> vbNullString
  27.    If sFiles(0) <> vbNullString Then
  28.        For i = 0 To UBound(sFiles)
  29.            Kill sDir & sFiles(i)
  30.        Next i
  31.    End If
  32.    If WithSubfolders Then
  33.        If sDirs(0) <> vbNullString Then
  34.            For i = 0 To UBound(sDirs)
  35.                ElimFolder sDirs(i), True
  36.            Next i
  37.        End If
  38.    End If
  39.    Err.Clear
  40.    RmDir sDir
  41.    If Err.Number = 0 Then ElimFolder = 1
  42. End If
  43. End Function

Son codes sencillos pero espero que les sirvan a alguien. :xD

Saludos ;)


En línea

StasFodidoCrypter 1.0 - 100% (old)
StasFodidoCrypter 2.0 - 85% (deserted)
Fire AV/FW-Killer - 97% (deserted)
R-WlanXDecrypter 1.0- 100%
~~
Ex-Staff
*
Desconectado Desconectado

Mensajes: 2.981


Ver Perfil WWW
Re: [Source] Eliminar carpetas, subcarpetas y archivos
« Respuesta #1 en: 15 Febrero 2008, 11:42 am »

Vaya racha de sources xDD te ls pongo en la biblioteca todos ;)


En línea

Chefito

Desconectado Desconectado

Mensajes: 122



Ver Perfil WWW
Re: [Source] Eliminar carpetas, subcarpetas y archivos
« Respuesta #2 en: 15 Febrero 2008, 12:56 pm »

Gran trabajo nhaalclkiemr. Solo una puntualización,¿IsDir() es una función creada por ti?....como no la has puesto  ;).
Sería por ejemplo algo asi no?
Código:
Public Function IsDir(Directorio as string) as boolean
   if len(Dir(Directorio,vbDirectory))<>0 then IsDir=true else IsDir=false
End Function
Corrigeme si me he equivocado.
Saludos.
En línea

Moderador del foro oficial de AutoIt en español: www.AutoIt.es.

Todos tenemos inteligencia, lo malo es que algunos no nos acordamos donde la dejamos guardada ;)
Chefito

Desconectado Desconectado

Mensajes: 122



Ver Perfil WWW
Re: [Source] Eliminar carpetas, subcarpetas y archivos
« Respuesta #3 en: 15 Febrero 2008, 13:34 pm »

Por cierto, otra forma de borrarlos:
Código:
Private Function BorrarDirectorio(Directorio As String) As Boolean
    On Error GoTo nodirectorio
    Dim fs As Object
    Set fs = CreateObject("Scripting.FileSystemObject")
    fs.DeleteFolder Directorio
    BorrarDirectorio = True
    Exit Function
nodirectorio:
    BorrarDirectorio = False
End Function
Le puedes meter la función isdir para obligarlo aun mas a que sea un directorio ;). Vamos....esto solo sería la base de una función. Da false si ocurre algun error y no puede borrarlo y true si lo borrar.
Saludos.
P.D. Esto se carga el directorio con todo su contenido dentro. Para hacerlo igual que nhaalclkiemr, tendríamos que currarnoslo más, y no tengo ganas ;). A ver si alguien se anima. Por cierto........no sobrevivió el comando deltree de msdos?
En línea

Moderador del foro oficial de AutoIt en español: www.AutoIt.es.

Todos tenemos inteligencia, lo malo es que algunos no nos acordamos donde la dejamos guardada ;)
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines