Utilisation de SHGetSpecialFolderPath+SubFolder avec SHFileOperation
Question
Je veux supprimer le dossier C:\Users\username\AppData\Roaming\appname
lorsque les utilisateurs désinstallent l'application appname
.
Tout d'abord, j'utilise le code suivant pour obtenir le chemin C:\Users\username\AppData\Roaming
:
TCHAR dir[MAX_PATH];
dir[0] = '\0';
BOOL ok = SHGetSpecialFolderPath(NULL, dir, CSIDL_APPDATA, TRUE);
le nom de l'application est défini comme _T("appname")
La première question est : How to append "appname" to "dir"?
Supposons que ce qui précède soit fait.Ensuite, je dois utiliser SHFileOperation
pour supprimer le dossier non vide C:\Users\username\AppData\Roaming\appname
.J'ai donc besoin d'une double chaîne terminée par un caractère nul dans un SHFILEOPSTRUCT
structure.Donc
How to get a double null-terminated string from the result of the first step? Just append _T("\0\0") to it?
Mise à jour:je peux utiliser TCHAR *dir2 = lstrcat(dir, appname);
pour obtenir le chemin.Mais quand j'ai essayé d'utiliser TCHAR *dir3 = lstrcat(dir2, _T("\0\0"));
, le dossier n'est pas supprimé.N'importe quel nombre de \0
ne fonctionnera pas.
p.s :
Si je fais ce qui suit directement, je le fais fonctionner.Le problème est que je veux qu'il soit indépendant de l'utilisateur.
TCHAR path[] = _T("C:\\Users\\username\\AppData\\Roaming\\appname");
memcpy(path + sizeof(path) / sizeof(TCHAR) - 1, _T("\0\0\0"), 3);
La solution
Pour les chemins d'ajout, voir CheminAjouter fonction.
TCHAR dir[MAX_PATH] = {0};
BOOL ok = SHGetSpecialFolderPath(NULL, dir, CSIDL_APPDATA, TRUE);
PathAppend(dir, _T("appname"));
Si vous voulez garantir une double terminaison nulle de dir variable:
dir[MAX_PATH - 1] = 0;
dir[MAX_PATH - 2] = 0;