Sto utilizzando la funzione SHFileOperation()
per inviare un file al cestino di riciclaggio e sto ricevendo 2 errori che non so cosa significano perché con questa funzione i codici di errore non sono valori GetLastError()
.Utilizzo di SHFileOperation: Quali errori si verificano
Se la funzione SHFileOperation()
non riesce, i valori di ritorno sono 0x57 (decimale 87) e 0x2 (decimale 2). Qualcuno può aiutarmi a scoprire le definizioni di questi errori (specialmente se si considera con questa funzione, gli errori non fanno parte dei codici GetLastError()
).
Alcune informazioni importanti:
Sto usando Windows 7 (& so che MSDN dice di usare IFileOperation invece di SHFileOperation ma voglio fare la mia app all'indietro compatibile ed è per questo che sto usando SHFileOperation) . Se l'errore si verifica perché sto utilizzando SHFileOperation su Windows 7 quale soluzione posso usare per far funzionare tutto su tutte le versioni di Windows dal 2000 & su?
Ho eseguito il debug in modo completo & per quanto ne so il mio SHFILEOPSTRUCT è corretto (flag corretti usati,. PFrom è una stringa con doppio zero finale). Una cosa che so per certo è che il mio percorso verso il file è corretto (porta a un file reale & correttamente formattato).
circa 2/5 volte la SHFileOperation() funziona, il che significa che invia il file nel cestino & non restituisce un errore
.
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;
}
Il tuo commento è fuorviante. Dovresti passarlo alla stessa riga di if o inside the if bloack e cambiarlo in // // if delete failed – sergiol