Come eliminare la cartella in cestino
-
12-09-2019 - |
Domanda
Sto programmazione in C ++, MFC, finestre.
Voglio eliminare una cartella in cestino. Come posso fare questo?
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);
Qualsiasi cosa sbagliata con il codice di cui sopra? E 'sempre riuscita.
Ho trovato il problema: filePath dovrebbe essere: "c: \ abc" non "c: \ abc \"
Soluzione
Il valore restituito da SHFileOperation è un int, e deve specificare il codice di errore. Che cosa si ottiene?
Altri suggerimenti
So che non è il modo giusto, ma se non riesci a trovare una soluzione si può provare questo ..
nircmd.exe download di file o di un altro exe che può Svuota cestino.
quindi si chiama queste funzioni da parte del sistema ( "emptybin nircmd.exe")
Hai trovato una soluzione che funziona, ma è solo per caso. Il vero problema qui è che il parametro pFrom
è in un formato speciale. Secondo la documentazione MSDN per SHFILEOPTS , memorizza un elenco di percorsi di file, ognuno null-terminated, e un nulla in più dopo l'ultimo.
Nel caso questo accade lavorare perché la matrice FromBuf
è più lungo il nome del file e tutte le voci vengono inizializzati a zero. La soluzione più generale è quello di creare un buffer che è abbastanza lungo per il nome del file e quindi aggiungere due caratteri NUL dopo di esso. Si noti che i nomi dei file di Windows possono essere più lungo di _MAX_PATH
, ad esempio, si veda https://docs.microsoft.com/en-us/windows/desktop/fileio/naming-a-file#maximum-path-length-limitation