Frage

Ich möchte den Ordner löschen C:\Users\username\AppData\Roaming\appname wenn die Benutzer die Anwendung deinstallieren appname.

Zuerst verwende ich den folgenden Code, um den Pfad abzurufen C:\Users\username\AppData\Roaming:

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

appname ist definiert als _T("appname")

Die erste Frage lautet: How to append "appname" to "dir"?

Angenommen, das oben Genannte ist erledigt.Dann muss ich es verwenden SHFileOperation um den nicht leeren Ordner zu löschen C:\Users\username\AppData\Roaming\appname.Ich brauche also eine doppelte nullterminierte Zeichenfolge in a SHFILEOPSTRUCT Struktur.Also

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

Aktualisieren:ich kann nutzen TCHAR *dir2 = lstrcat(dir, appname); um den Weg zu finden.Aber als ich versuchte zu verwenden TCHAR *dir3 = lstrcat(dir2, _T("\0\0"));, der Ordner wird nicht gelöscht.Eine beliebige Anzahl von \0 wird nicht funktionieren.


p.s.:

Wenn ich Folgendes direkt mache, funktioniert es.Das Problem ist, dass ich es benutzerunabhängig haben möchte.

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

Lösung

Informationen zum Anhängen von Pfaden finden Sie unter PathAppend Funktion.

TCHAR dir[MAX_PATH] = {0};

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

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

Wenn Sie möchten, stellen Sie sicher, dass es mit einer doppelten Null endet dir Variable:

dir[MAX_PATH - 1] = 0;
dir[MAX_PATH - 2] = 0;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top