c - 将 SHGetSpecialFolderPath+SubFolder 与 SHFileOperation 结合使用

标签 c winapi directory tchar

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

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

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

appname 定义为 _T("appname")

第一个问题是:如何将“appname”附加到“dir”?

假设以上都完成了。然后我需要使用 SHFileOperation 删除非空文件夹 C:\Users\username\AppData\Roaming\appname。因此,我需要在 SHFILEOPSTRUCT 结构中使用两个以 null 结尾的字符串。所以

如何从第一步的结果中获取双空终止字符串?只需将 _T("\0\0") 附加到它上面?

更新:我可以使用 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);

最佳答案

有关附加路径,请参阅 PathAppend功能。

TCHAR dir[MAX_PATH] = {0};

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

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

如果您想确保 dir 变量以双 null 终止:

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

关于c - 将 SHGetSpecialFolderPath+SubFolder 与 SHFileOperation 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11653089/

相关文章:

c - 给定两个整数,编写一个程序,使用函数 add() 将这些数字相加,并使用 sub() 来查找差异

c++ - 在c中调整字符数组的大小

android - 在其他应用程序中创建后看不到我的文件夹或文件

node.js - 如何使用 Node.js 删除非空目录

java - 如何引用不同目录子结构中的文件/目录?

C 结构数组输入

c - 如何 'clear'一个字符串数组?

c++ - 具有 WinAPI 的真正 transient 窗口?

windows - 创建钢筋控制并将带工具栏的带引入钢筋中

objective-c - 向 C void * 发送 Objective-C 消息