una todos los delete carpeta borrar archivos winapi

winapi - todos - file.delete c#



¿Cuál es la función de la API Win32 para usar para eliminar una carpeta? (6)

Creo que quieres DeleteFile y RemoveDirectory

¿Cuáles son las API de Win32 para usar para eliminar archivos y carpetas de manera programada?

Editar

DeleteFile y RemoveDirectory son lo que estaba buscando. Sin embargo, para este proyecto terminé usando SHFileOperation . Encontré útil el código de muestra en CodeGuru.


Hay dos maneras de abordar esto. Uno es a través de los Servicios de archivos (usando comandos como DeleteFile y RemoveDirectory ) y el otro es a través del Shell de Windows (usando SHFileOperation ). Este último se recomienda si desea eliminar directorios no vacíos o si desea comentarios del estilo del explorador (diálogos de progreso con archivos de vuelo, por ejemplo). La forma más rápida de hacerlo es crear un SHFILEOPSTRUCT , inicializarlo y llamar a SHFileOperation , por lo tanto:

void silently_remove_directory(LPCTSTR dir) // Fully qualified name of the directory being deleted, without trailing backslash { SHFILEOPSTRUCT file_op = { NULL, FO_DELETE, dir, "", FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_SILENT, false, 0, "" }; SHFileOperation(&file_op); }

Esto elimina silenciosamente todo el directorio. Puede agregar retroalimentación e indicaciones variando la inicialización de SHFILEOPSTRUCT, realice una lectura en él.


Ver el comentario de uvgroovy arriba. Necesita 2 nulos al final del campo ''dir''.

int silently_remove_directory(LPCTSTR dir) // Fully qualified name of the directory being deleted, without trailing backslash { int len = strlen(dir) + 2; // required to set 2 nulls at end of argument to SHFileOperation. char* tempdir = (char*) malloc(len); memset(tempdir,0,len); strcpy(tempdir,dir); SHFILEOPSTRUCT file_op = { NULL, FO_DELETE, tempdir, "", FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_SILENT, false, 0, "" }; int ret = SHFileOperation(&file_op); free(tempdir); return ret; // returns 0 on success, non zero on failure. }


/* function used to send files and folder to recycle bin in win32 */ int fn_Send_Item_To_RecycleBin(TCHAR newpath[]) { _tcscat_s(newpath, MAX_PATH,_T("|")); TCHAR* Lastptr = _tcsrchr(newpath, _T(''|'')); *Lastptr = _T(''/0''); // Replace last pointer with Null for double null termination SHFILEOPSTRUCT shFileStruct; ZeroMemory(&shFileStruct,sizeof(shFileStruct)); shFileStruct.hwnd=NULL; shFileStruct.wFunc= FO_DELETE; shFileStruct.pFrom= newpath; shFileStruct.fFlags = FOF_ALLOWUNDO | FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_SILENT; return SHFileOperation(&shFileStruct); }



Creo que DeleteFile no envía el archivo a la Papelera de reciclaje. Además, RemoveDirectory elimina solo los RemoveDirectory vacíos. SHFileOperation le daría el mayor control sobre qué y cómo eliminar y mostraría los cuadros de diálogo de la interfaz de usuario de Windows estándar (por ejemplo, "Preparación para eliminar, etc." si es necesario).