Estoy usando la función SHFileOperation()
para enviar un archivo a la papelera de reciclaje y estoy recibiendo 2 errores que no sé lo que significan porque con esta función los códigos de error no son GetLastError()
valores.Usando SHFileOperation: Qué errores están ocurriendo
Cuando la función SHFileOperation()
falla, los valores de retorno son 0x57 (decimal 87) y 0x2 (decimal 2). ¿Alguien puede ayudarme a descubrir las definiciones de estos errores (especialmente cuando se considera con esta función, los errores no son parte de los códigos GetLastError()
).
algunos datos importantes:
estoy usando Windows 7 (& Sé que MSDN dice que use IFileOperation en lugar de SHFileOperation pero yo quiero hacer mi aplicación hacia atrás compatible por lo que estoy usando SHFileOperation) . Si el error se produce porque estoy usando SHFileOperation en Windows 7, ¿qué solución podría usar para hacer que esto funcione en todas las versiones de Windows desde 2000 &?
He depurado extensamente & por lo que sé que mi SHFILEOPSTRUCT es correcto (las banderas correctas utilizadas, .pFrom es una secuencia de doble terminación nula). Una cosa que sé con certeza es que mi ruta al archivo es correcta (conduce a un archivo real & correctamente formateado).
Sobre 2/5 veces el SHFileOperation() funciona, lo que significa que envía el archivo a la papelera de reciclaje & no devuelve un error
.
BOOL result;
SHFILEOPSTRUCT fileStruct;
fileStruct.hwnd = hwnd;
fileStruct.wFunc = FO_DELETE;
fileStruct.pFrom = dest.c_str();
fileStruct.fFlags = FOF_FILESONLY; // FOF_ALLOWUNDO
fileStruct.fAnyOperationsAborted = result;
// Call operation(delete file)
int success = SHFileOperation(&fileStruct);
// if delete was successful
if (success != 0)
{
printf("%s \t %X %d \n", dest.c_str(), success, success);
cout << result << endl;
MessageBox(hwnd, "Failed to delete file", "Error", MB_OK|MB_ICONERROR);
return;
}
Su comentario es engañoso. Debes pasarlo a la misma línea que if o dentro de if bloack y cambiarlo a '// si delete failed' – sergiol