Использование SHGetSpecialFolderPath+вложенной папки с SHFileOperation

StackOverflow https://stackoverflow.com//questions/11653089

  •  11-12-2019
  •  | 
  •  

Вопрос

Я хочу удалить эту папку 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 не сработает.


p.s:

Если я сделаю следующее напрямую, у меня все заработает.Проблема в том, что я хочу, чтобы это было независимо от пользователя.

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