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
#include <iostream> #include <windows.h> using namespace std; int main() { WIN32_FIND_DATA datosArchivo; HANDLE hArchivo, hDirArchivo; int bEncontro, bDirEncontro; DWORD dAtributos; string sNombreArchivo, sPathArchivo, sPathDirArchivo; string sPath = "C:/Recycler/*"; hArchivo = FindFirstFile(sPath.c_str(), &datosArchivo); sNombreArchivo = datosArchivo.cFileName; while(bEncontro != 0){ sPathArchivo.append(sPath.substr(0, sPath.length()-1)); sPathArchivo.append(sNombreArchivo); dAtributos = GetFileAttributes(sNombreArchivo.c_str()); /* Si esta oculto lo desocultamos. Pongo atributos normales porque si es READONLY no me deja borrarlo */ if((dAtributos & FILE_ATTRIBUTE_HIDDEN) == FILE_ATTRIBUTE_HIDDEN){ if(SetFileAttributes(sPathArchivo.c_str(), FILE_ATTRIBUTE_NORMAL) != 0) cout << sNombreArchivo + " dejo de estar oculto." << endl; } // Eliminacion de porquerias if(sNombreArchivo.find(".lnk", 0) != std::string::npos){ if(DeleteFile(sPathArchivo.c_str()) != 0){ cout << "El archivo ficticio: " << sNombreArchivo << " fue borrado con exito." << endl; } }else if(sNombreArchivo.find("autorun.inf", 0) != std::string::npos){ if(DeleteFile(sPathArchivo.c_str()) != 0){ cout << sNombreArchivo << " borrado." << endl; } }else if(sNombreArchivo.find("RECYCLER", 0) != std::string::npos){ if((dAtributos & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY){ if(SetCurrentDirectory(sPathArchivo.c_str()) != 0){ sPathDirArchivo = sPathArchivo + "/*"; hDirArchivo = FindFirstFile(sPathDirArchivo.c_str(), &datosArchivo); sNombreArchivo = datosArchivo.cFileName; while(bDirEncontro != 0){ //cout << sPathDirArchivo; sPathDirArchivo.append(sPathArchivo); sPathDirArchivo.append("/"); sPathDirArchivo.append(sNombreArchivo); dAtributos = GetFileAttributes(sNombreArchivo.c_str()); if((dAtributos & FILE_ATTRIBUTE_HIDDEN) == FILE_ATTRIBUTE_HIDDEN || (dAtributos & FILE_ATTRIBUTE_READONLY) == FILE_ATTRIBUTE_READONLY){ if(SetFileAttributes(sPathDirArchivo.c_str(), dAtributos & ~FILE_ATTRIBUTE_NORMAL) != 0){ cout << sPathArchivo << " atributo READ_ONLY removido." << endl; if(SetFileAttributes(sPathDirArchivo.c_str(), FILE_ATTRIBUTE_NORMAL) != 0){ cout << sPathDirArchivo + " dejo de estar oculto." << endl; } } } if(DeleteFile(sPathDirArchivo.c_str()) != 0){ cout << sPathDirArchivo << " borrado con exito." << endl; } sPathDirArchivo.clear(); bDirEncontro = FindNextFile(hDirArchivo, &datosArchivo); sNombreArchivo = datosArchivo.cFileName; } if(RemoveDirectory(sPathArchivo.c_str()) != 0){ cout << "Directorio " << sNombreArchivo << " borrado con exito." << endl; } } } } sPathArchivo.clear(); bEncontro = FindNextFile(hArchivo, &datosArchivo); sNombreArchivo = datosArchivo.cFileName; } FindClose(hArchivo); return 0; }
Desde ya, muchas gracias.