Domanda

Voglio eliminare la cartella C:\Users\username\AppData\Roaming\appname quando gli utenti disinstallano l'applicazione appname.

In primo luogo, utilizzo il seguente codice per ottenere il percorso C:\Users\username\AppData\Roaming:

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

appname è definito come _T("appname")

La prima domanda è: How to append "appname" to "dir"?

Supponiamo che quanto sopra sia fatto.Quindi ho bisogno di usare SHFileOperation per eliminare la cartella non vuota C:\Users\username\AppData\Roaming\appname.Quindi ho bisogno di una doppia stringa terminata null in una struttura SHFILEOPSTRUCT.Quindi

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

Aggiornamento: posso usare TCHAR *dir2 = lstrcat(dir, appname); per ottenere il percorso.Ma quando ho provato a utilizzare TCHAR *dir3 = lstrcat(dir2, _T("\0\0"));, la cartella non viene eliminata.Qualsiasi numero di \0 non funzionerà.


.

P.S:

Se faccio direttamente i seguenti, ho capito per lavorare.Il problema è che voglio essere indipendente dall'utente.

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

È stato utile?

Soluzione

Per i percorsi aggiuntivi vedere PathAppend Funzione.

TCHAR dir[MAX_PATH] = {0};

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

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

Se si desidera garantire la doppia chiusura null di Dir Variabile:

dir[MAX_PATH - 1] = 0;
dir[MAX_PATH - 2] = 0;
.

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