将SHGetSpecialFolderPath + SubFolder与SHFileOperation一起使用

时间:2012-07-25 15:21:10

标签: c winapi directory tchar

我想在用户卸载应用程序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);

appname定义为_T("appname")

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

假设完成上述操作。然后我需要使用SHFileOperation删除非空文件夹C:\Users\username\AppData\Roaming\appname。所以我需要SHFILEOPSTRUCT结构中的双以null结尾的字符串。所以

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都不起作用。


P.S:

如果我直接执行以下操作,我就可以开始工作了。问题是我希望它与用户无关。

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

1 个答案:

答案 0 :(得分:1)

有关追加路径的信息,请参阅PathAppend功能。

TCHAR dir[MAX_PATH] = {0};

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

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

如果你想确保 dir 变量的双重空终止:

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