Como excluir pasta na lixeira
-
12-09-2019 - |
Pergunta
Estou programando em C ++, MFC, janelas.
Eu quero excluir uma pasta em lixeira. Como posso fazer isso?
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);
Qualquer coisa errada com o código acima? É sempre falhou.
Eu encontrei o problema: filePath deve ser: "c: \ abc" não "c: \ abc \"
Solução
O valor de retorno de SHFileOperation é um int, e deve especificar o código de erro. O que você ganha?
Outras dicas
Eu sei que não é o caminho certo, mas se você não pode encontrar uma solução você pode tentar este ..
nircmd.exe arquivo de download ou de outra exe que pode esvaziar lixeira.
então você chamar essas funções pelo sistema ( "emptybin nircmd.exe")
Você encontrou uma solução que funciona, no entanto, é apenas por acidente. O problema real aqui é que o parâmetro pFrom
está em um formato especial. De acordo com a documentação do MSDN para SHFILEOPTS , ele armazena uma lista de caminhos de arquivo, cada uma terminada com nulo, e um nulo extra após a última.
No seu caso isso acontece ao trabalho porque a matriz FromBuf
é maior do que o nome do arquivo e todas as entradas são inicializados a zero. A solução mais geral é criar um buffer que é tempo suficiente para que o nome do arquivo e, em seguida, adicionar dois personagens nul depois. Note que nomes de arquivos do Windows pode ter mais de _MAX_PATH
, por exemplo, ver https://docs.microsoft.com/en-us/windows/desktop/fileio/naming-a-file#maximum-path-length-limitation