Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Jue 19 Ene, 2006 7:42 am Asunto: Borrar un directorio |
|
|
para borrar todo un directorio aun con informacion dentro existe la siguiente funcion, la he probado y funciona de manera correcta para Windows
incluir las siguientes cabeceras
| Código: | #include <io.h>
#include <dos.h> |
| Código: | //-------------
BOOL IsDots(const TCHAR* str) {
if(_tcscmp(str,".") && _tcscmp(str,"..")) return FALSE;
return TRUE;
}
BOOL DeleteDirectory(const TCHAR* sPath) {
HANDLE hFind; // Handel del Archivo
WIN32_FIND_DATA FindFileData;
TCHAR DirPath[MAX_PATH];
TCHAR FileName[MAX_PATH];
_tcscpy(DirPath,sPath);
_tcscat(DirPath,"\\*"); // Buscar todos los Archivos
_tcscpy(FileName,sPath);
_tcscat(FileName,"\\");
// Buscar el Primer Archivos
hFind = FindFirstFile(DirPath,&FindFileData);
if(hFind == INVALID_HANDLE_VALUE) return FALSE;
_tcscpy(DirPath,FileName);
bool bSearch = true;
while(bSearch) { // Mientras que encontramos una entrada
if(FindNextFile(hFind,&FindFileData)) {
if(IsDots(FindFileData.cFileName)) continue;
_tcscat(FileName,FindFileData.cFileName);
if((FindFileData.dwFileAttributes &
FILE_ATTRIBUTE_DIRECTORY)) {
// si encontramos un recurso tipo directorio
if(!DeleteDirectory(FileName)) {
FindClose(hFind);
return FALSE; // El direcotorio no pude ser borrado
}
// Se remueve el directorio Vacio
RemoveDirectory(FileName);
_tcscpy(FileName,DirPath);
}
else {
if(FindFileData.dwFileAttributes &
FILE_ATTRIBUTE_READONLY)
// Cambiamos el mode solo lectura
_rtl_chmod(FileName, FA_RDONLY);
if(!DeleteFile(FileName)) { // Borramos el Archivo
FindClose(hFind);
return FALSE;
}
_tcscpy(FileName,DirPath);
}
}
else {
// Si No hay Mas Archivos
if(GetLastError() == ERROR_NO_MORE_FILES)
bSearch = false;
else {
FindClose(hFind);
return FALSE;
}
}
}
FindClose(hFind); // Cerramos el Handle del Archivo
return RemoveDirectory(sPath); // Removemos el directorio ya Vacio
} |
y para usarla, podemos hacerlo de la siguiente manera
| Código: | AnsiString directorio = "c:\\Windows"
DeleteDirectory(directorio); |
por favor cambiar el directorio a borrar, no me hago responsable que falle el sistema operativo, la segunda vez que arranca
obiamente, no lo van hacer verdad!!
Saludos... _________________
 |
|