Pergunta

Quero excluir a pasta C:\Users\username\AppData\Roaming\appname quando os usuários desinstalam o aplicativo appname.

Primeiro, eu uso o seguinte código para obter o caminho C:\Users\username\AppData\Roaming:

TCHAR dir[MAX_PATH];
dir[0] = '\0';
BOOL ok = SHGetSpecialFolderPath(NULL, dir, CSIDL_APPDATA, TRUE);

nome do aplicativo é definido como _T("appname")

A primeira pergunta é: How to append "appname" to "dir"?

Suponha que o acima seja feito.Então eu preciso usar SHFileOperation para excluir a pasta não vazia C:\Users\username\AppData\Roaming\appname.Então eu preciso de uma string dupla terminada em nulo em um SHFILEOPSTRUCT estrutura.Então

How to get a double null-terminated string from the result of the first step? Just append _T("\0\0") to it?

Atualizar:Eu posso usar TCHAR *dir2 = lstrcat(dir, appname); para obter o caminho.Mas quando tentei usar TCHAR *dir3 = lstrcat(dir2, _T("\0\0"));, a pasta não será excluída.Qualquer número de \0 não vai funcionar.


p.s.:

Se eu fizer o seguinte diretamente, consegui que funcionasse.O problema é que quero que seja independente do usuário.

TCHAR path[] = _T("C:\\Users\\username\\AppData\\Roaming\\appname");
memcpy(path + sizeof(path) / sizeof(TCHAR) - 1, _T("\0\0\0"), 3);
Foi útil?

Solução

Para anexar caminhos, consulte CaminhoAnexar função.

TCHAR dir[MAX_PATH] = {0};

BOOL ok = SHGetSpecialFolderPath(NULL, dir, CSIDL_APPDATA, TRUE);

PathAppend(dir, _T("appname"));

Se você quiser garantir a terminação nula dupla de diretório variável:

dir[MAX_PATH - 1] = 0;
dir[MAX_PATH - 2] = 0;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top