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

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top