Pregunta

quiero borrar la carpeta C:\Users\username\AppData\Roaming\appname cuando los usuarios desinstalan la aplicación appname.

Primero, uso el siguiente código para obtener la ruta. C:\Users\username\AppData\Roaming:

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

nombre de aplicación se define como _T("appname")

La primera pregunta es: How to append "appname" to "dir"?

Supongamos que se hace lo anterior.Entonces necesito usar SHFileOperation para eliminar la carpeta que no está vacía C:\Users\username\AppData\Roaming\appname.Entonces necesito una cadena doble terminada en nulo en un SHFILEOPSTRUCT estructura.Entonces

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

Actualizar:Puedo usar TCHAR *dir2 = lstrcat(dir, appname); para conseguir el camino.Pero cuando intenté usar TCHAR *dir3 = lstrcat(dir2, _T("\0\0"));, la carpeta no se elimina.Cualquier numero de \0 no funcionará.


PD:

Si hago lo siguiente directamente, lo hago funcionar.El problema es que quiero que sea independiente del usuario.

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

Solución

Para agregar rutas, consulte Agregar ruta función.

TCHAR dir[MAX_PATH] = {0};

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

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

Si desea garantizar la terminación doble nula de directorio variable:

dir[MAX_PATH - 1] = 0;
dir[MAX_PATH - 2] = 0;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top