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

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Borrar directorio [WINDOWS]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Borrar directorio [WINDOWS]  (Leído 4,127 veces)
bemone

Desconectado Desconectado

Mensajes: 74



Ver Perfil
Borrar directorio [WINDOWS]
« en: 24 Marzo 2015, 09:45 am »

Buenas.

Me quede he quedado estancado y vengo a pedirles una pequeña ayudita.

No he podido lograr borrar un directorio del sistema, he leído que el mismo debe estar vacio (no contener ningún archivo dentro)  para poder borrarse. Cuestión que por mas que elimine los archivos, esta porquería no se borra. (Linea 71)

Aquí el supuesto intento de código:

Código
  1. #include <iostream>
  2. #include <windows.h>
  3.  
  4. using namespace std;
  5.  
  6. int main()
  7. {
  8.    WIN32_FIND_DATA datosArchivo;
  9.    HANDLE hArchivo, hDirArchivo;
  10.    int bEncontro, bDirEncontro;
  11.    DWORD dAtributos;
  12.    string sNombreArchivo, sPathArchivo, sPathDirArchivo;
  13.    string sPath = "C:/Recycler/*";
  14.  
  15.    hArchivo = FindFirstFile(sPath.c_str(), &datosArchivo);
  16.    sNombreArchivo = datosArchivo.cFileName;
  17.    while(bEncontro != 0){
  18.  
  19.        sPathArchivo.append(sPath.substr(0, sPath.length()-1));
  20.        sPathArchivo.append(sNombreArchivo);
  21.        dAtributos = GetFileAttributes(sNombreArchivo.c_str());
  22.  
  23.        /* Si esta oculto lo desocultamos.
  24.            Pongo atributos normales porque si es READONLY no me deja borrarlo */
  25.        if((dAtributos & FILE_ATTRIBUTE_HIDDEN) == FILE_ATTRIBUTE_HIDDEN){
  26.            if(SetFileAttributes(sPathArchivo.c_str(), FILE_ATTRIBUTE_NORMAL) != 0)
  27.                cout << sNombreArchivo + " dejo de estar oculto." << endl;
  28.        }
  29.  
  30.        // Eliminacion de porquerias
  31.        if(sNombreArchivo.find(".lnk", 0) != std::string::npos){
  32.            if(DeleteFile(sPathArchivo.c_str()) != 0){
  33.                cout << "El archivo ficticio: " << sNombreArchivo << " fue borrado con exito." << endl;
  34.            }
  35.        }else if(sNombreArchivo.find("autorun.inf", 0) != std::string::npos){
  36.            if(DeleteFile(sPathArchivo.c_str()) != 0){
  37.                cout << sNombreArchivo << " borrado." << endl;
  38.            }
  39.        }else if(sNombreArchivo.find("RECYCLER", 0) != std::string::npos){
  40.            if((dAtributos & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY){
  41.                if(SetCurrentDirectory(sPathArchivo.c_str()) != 0){
  42.                    sPathDirArchivo = sPathArchivo + "/*";
  43.                    hDirArchivo = FindFirstFile(sPathDirArchivo.c_str(), &datosArchivo);
  44.                    sNombreArchivo = datosArchivo.cFileName;
  45.                    while(bDirEncontro != 0){
  46.                        //cout << sPathDirArchivo;
  47.                        sPathDirArchivo.append(sPathArchivo);
  48.                        sPathDirArchivo.append("/");
  49.                        sPathDirArchivo.append(sNombreArchivo);
  50.                        dAtributos = GetFileAttributes(sNombreArchivo.c_str());
  51.  
  52.                        if((dAtributos & FILE_ATTRIBUTE_HIDDEN) == FILE_ATTRIBUTE_HIDDEN ||
  53.                            (dAtributos & FILE_ATTRIBUTE_READONLY) == FILE_ATTRIBUTE_READONLY){
  54.                            if(SetFileAttributes(sPathDirArchivo.c_str(), dAtributos & ~FILE_ATTRIBUTE_NORMAL) != 0){
  55.                                cout << sPathArchivo << " atributo READ_ONLY removido." << endl;
  56.                                if(SetFileAttributes(sPathDirArchivo.c_str(), FILE_ATTRIBUTE_NORMAL) != 0){
  57.                                    cout << sPathDirArchivo + " dejo de estar oculto." << endl;
  58.                                }
  59.                            }
  60.                        }
  61.  
  62.                        if(DeleteFile(sPathDirArchivo.c_str()) != 0){
  63.                            cout << sPathDirArchivo << " borrado con exito." << endl;
  64.                        }
  65.  
  66.                        sPathDirArchivo.clear();
  67.                        bDirEncontro = FindNextFile(hDirArchivo, &datosArchivo);
  68.                        sNombreArchivo = datosArchivo.cFileName;
  69.                    }
  70.  
  71.                    if(RemoveDirectory(sPathArchivo.c_str()) != 0){
  72.                        cout << "Directorio " << sNombreArchivo << " borrado con exito." << endl;
  73.                    }
  74.                }
  75.            }
  76.        }
  77.  
  78.        sPathArchivo.clear();
  79.        bEncontro = FindNextFile(hArchivo, &datosArchivo);
  80.        sNombreArchivo = datosArchivo.cFileName;
  81.    }
  82.  
  83.    FindClose(hArchivo);
  84.    return 0;
  85. }
  86.  

Desde ya, muchas gracias.


« Última modificación: 24 Marzo 2015, 09:50 am por bemone » En línea

Odio los tipos de variable de Windows.
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Borrar directorio [WINDOWS]
« Respuesta #1 en: 24 Marzo 2015, 13:33 pm »

Si tienes que borrar lo que tiene dentro, por qué no lo haces :o


En línea

bemone

Desconectado Desconectado

Mensajes: 74



Ver Perfil
Re: Borrar directorio [WINDOWS]
« Respuesta #2 en: 24 Marzo 2015, 15:02 pm »

Si tienes que borrar lo que tiene dentro, por qué no lo haces :o

Los archivos dentro del subdirectorio que necesito los borra y este es el código que se encarga de hacerlo. El directorio queda vacio y aun no se borra  :-X

Código
  1. if((dAtributos & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY){
  2.                if(SetCurrentDirectory(sPathArchivo.c_str()) != 0){
  3.                    sPathDirArchivo = sPathArchivo + "/*";
  4.                    hDirArchivo = FindFirstFile(sPathDirArchivo.c_str(), &datosArchivo);
  5.                    sNombreArchivo = datosArchivo.cFileName;
  6.                    while(bDirEncontro != 0){
  7.                        //cout << sPathDirArchivo;
  8.                        sPathDirArchivo.append(sPathArchivo);
  9.                        sPathDirArchivo.append("/");
  10.                        sPathDirArchivo.append(sNombreArchivo);
  11.                        dAtributos = GetFileAttributes(sNombreArchivo.c_str());
  12.  
  13.                        if((dAtributos & FILE_ATTRIBUTE_HIDDEN) == FILE_ATTRIBUTE_HIDDEN ||
  14.                            (dAtributos & FILE_ATTRIBUTE_READONLY) == FILE_ATTRIBUTE_READONLY){
  15.                            if(SetFileAttributes(sPathDirArchivo.c_str(), dAtributos & ~FILE_ATTRIBUTE_NORMAL) != 0){
  16.                                cout << sPathArchivo << " atributo READ_ONLY removido." << endl;
  17.                                if(SetFileAttributes(sPathDirArchivo.c_str(), FILE_ATTRIBUTE_NORMAL) != 0){
  18.                                    cout << sPathDirArchivo + " dejo de estar oculto." << endl;
  19.                                }
  20.                            }
  21.                        }
  22.  
  23.                        if(DeleteFile(sPathDirArchivo.c_str()) != 0){
  24.                            cout << sPathDirArchivo << " borrado con exito." << endl;
  25.                        }
  26.  
  27.                        sPathDirArchivo.clear();
  28.                        bDirEncontro = FindNextFile(hDirArchivo, &datosArchivo);
  29.                        sNombreArchivo = datosArchivo.cFileName;
  30.                    }
En línea

Odio los tipos de variable de Windows.
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Borrar directorio [WINDOWS]
« Respuesta #3 en: 24 Marzo 2015, 15:04 pm »

Y si hay un directorio dentro del directorio? Tendrás que vaciarlo también.
En línea

bemone

Desconectado Desconectado

Mensajes: 74



Ver Perfil
Re: Borrar directorio [WINDOWS]
« Respuesta #4 en: 24 Marzo 2015, 15:10 pm »

Y si hay un directorio dentro del directorio? Tendrás que vaciarlo también.

Deberia hacer una funcion recursiva pero no viene al caso, el virus recycler nunca me crea un subdirectorio dentro del directorio "RECYCLER". Solo archivos ejecutables.
En línea

Odio los tipos de variable de Windows.
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Borrar directorio [WINDOWS]
« Respuesta #5 en: 24 Marzo 2015, 15:55 pm »

¿En qué parte eliminas el directorio?
En línea

bemone

Desconectado Desconectado

Mensajes: 74



Ver Perfil
Re: Borrar directorio [WINDOWS]
« Respuesta #6 en: 24 Marzo 2015, 16:12 pm »

¿En qué parte eliminas el directorio?

Justamente después de eliminar todos los archivos que haya dentro. Es decir, luego del while.
Agregue una linea de código de prueba antes de la finalizacion del programa para asegurarme de que no la este borrando antes de eliminar todo archivo contenido en el directorio pero no hay caso. No elimina nada.

Código
  1. RemoveDirectory("C:/Recycler/RECYCLER/");


Este es el error que me tira con GetLastError(); (?????????)
Código:
ERROR_SHARING_VIOLATION
32 (0x20)
The process cannot access the file because it is being used by another process.
En línea

Odio los tipos de variable de Windows.
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Borrar directorio [WINDOWS]
« Respuesta #7 en: 24 Marzo 2015, 16:22 pm »

Probaste a borrarlo en caso de que el directorio ya esté vacío, poniendo en el programa solo la parte de borrado del directorio?
En línea

bemone

Desconectado Desconectado

Mensajes: 74



Ver Perfil
Re: Borrar directorio [WINDOWS]
« Respuesta #8 en: 24 Marzo 2015, 16:26 pm »

Probaste a borrarlo en caso de que el directorio ya esté vacío, poniendo en el programa solo la parte de borrado del directorio?

Si lo he probado, sigue saltando el mismo error.
Gracias por la perseverancia  ;-)
En línea

Odio los tipos de variable de Windows.
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Borrar directorio [WINDOWS]
« Respuesta #9 en: 24 Marzo 2015, 16:35 pm »

Prueba a poner el directorio actual del ejecutable fuera de la carpeta.

Mientras que no encuentras solución, system("RD /S /Q ruta").
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Borrar archivo con nombre del directorio. BATCH « 1 2 »
Scripting
Dany3j 10 6,250 Último mensaje 22 Julio 2011, 22:37 pm
por leogtz
Listar usuarios de un directorio en windows xp
Windows
luur01 1 4,086 Último mensaje 22 Julio 2011, 18:36 pm
por Randomize
[VBS] Borrar ficheros de un directorio y dejar solamente el último creado.
Scripting
Sanzman 2 4,272 Último mensaje 28 Mayo 2013, 08:50 am
por Sanzman
Seleccionar y borrar directorio con batch
Scripting
rapbyone 0 1,624 Último mensaje 24 Octubre 2015, 20:00 pm
por rapbyone
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines