我想删除文件夹 C:\Users\username\AppData\Roaming\appname 当用户卸载应用程序时 appname.

首先,我使用以下代码来获取路径 C:\Users\username\AppData\Roaming:

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

应用程序名称定义为 _T("appname")

第一个问题是: How to append "appname" to "dir"?

假设上面的事情都完成了。然后我需要使用 SHFileOperation 删除非空文件夹 C:\Users\username\AppData\Roaming\appname. 。所以我需要一个双空终止字符串 SHFILEOPSTRUCT 结构。所以

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

更新:我可以用 TCHAR *dir2 = lstrcat(dir, appname); 获取路径。但是当我尝试使用时 TCHAR *dir3 = lstrcat(dir2, _T("\0\0"));, ,该文件夹不会被删除。任意数量的 \0 行不通的。


附:

如果我直接执行以下操作,我就可以正常工作。问题是我希望它独立于用户。

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

解决方案

对于附加路径,请参阅 路径追加 功能。

TCHAR dir[MAX_PATH] = {0};

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

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

如果你想确保双空终止 目录 多变的:

dir[MAX_PATH - 1] = 0;
dir[MAX_PATH - 2] = 0;
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top