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);
Était-ce utile?

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;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top