Cómo eliminar la carpeta en la papelera de reciclaje
-
12-09-2019 - |
Pregunta
Estoy de programación en C ++, MFC, ventanas.
Quiero eliminar una carpeta a la papelera de reciclaje. ¿Cómo puedo hacer esto?
CString filePath = directorytoBeDeletePath;
TCHAR ToBuf[MAX_PATH + 10];
TCHAR FromBuf[MAX_PATH + 10];
ZeroMemory(ToBuf, sizeof(ToBuf));
ZeroMemory(FromBuf, sizeof(FromBuf));
lstrcpy(FromBuf, filePath);
SHFILEOPSTRUCT FileOp;
FileOp.hwnd = NULL
FileOp.wFunc=FO_DELETE;
FileOp.pFrom=FromBuf;
FileOp.pTo = NULL;
FileOp.fFlags=FOF_ALLOWUNDO|FOF_NOCONFIRMATION;
FileOp.hNameMappings=NULL;
bRet=SHFileOperation(&FileOp);
Cualquier cosa mal con el código anterior? Siempre ha fallado.
He encontrado el problema: rutaArchivo debe ser: "c: \ abc" no "c: \ abc \"
Solución
El valor de retorno de SHFileOperation es un entero, y debe especificar el código de error. ¿Qué se obtiene?
Otros consejos
Sé que no es el camino correcto, pero si no puede encontrar una solución que puedo probar este ..
nircmd.exe archivo de descarga u otro exe que puede vaciar la papelera de reciclaje.
A continuación, se llama a estas funciones por el sistema ( "emptybin nircmd.exe")
Ha encontrado una solución que funciona, sin embargo, es sólo por accidente. El problema real aquí es que el parámetro pFrom
está en un formato especial. De acuerdo con la documentación de MSDN para SHFILEOPTS , que almacena una lista de rutas de archivos, cada una terminada en nulo, y un nulo extra después de la última.
En su caso esto le sucede a trabajar porque la matriz FromBuf
es más largo que el nombre de archivo y todas las entradas se inicializa a cero. La solución más general es crear un búfer que es tiempo suficiente para que el nombre del archivo y luego añadir dos personajes nul después de ella. Tenga en cuenta que los nombres de archivos de Windows puede tener más de _MAX_PATH
, por ejemplo, véase https://docs.microsoft.com/en-us/windows/desktop/fileio/naming-a-file#maximum-path-length-limitation