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 \"

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top