사용자가 appname
응용 프로그램을 제거하면 C:\Users\username\AppData\Roaming\appname
폴더를 삭제하려고합니다.SHFileOperation과 함께 SHGetSpecialFolderPath + SubFolder 사용
TCHAR dir[MAX_PATH];
dir[0] = '\0';
BOOL ok = SHGetSpecialFolderPath(NULL, dir, CSIDL_APPDATA, TRUE);
APPNAME은 첫 번째 질문은 _T("appname")
다음과 같이 정의된다 : How to append "appname" to "dir"?
위 이루어집니다 가정
첫째, 나는 경로 C:\Users\username\AppData\Roaming
를 얻기 위해 다음 코드를 사용합니다. 그런 다음 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);
는'이어야한다 DIR [MAX_PATH + 1] '등을 추가 널 종료합니다. –
@ Xearinox : 나는 혼란 스럽다. 실제 경로가'C : \ a'라고 가정하고,'dir'은'dir [256]'으로 정의됩니다. 경로가 double null로 끝나기 위해서는'dir [4]'와'dir [5] '가'0 '이 아니라'dir [MAX_PATH - 1]'과'dir [MAX_PATH - 2] '? – user565739
그러나 코드에서 dir의 모든 tchars는 0으로 초기화되고, dir [4]와 dir [5]는 0으로 초기화됩니다. 이것은 몇 가지 추가 사항입니다. 하지만 현실 세계에서는 버퍼 오버 플로우 등과 같은 검사를해야합니다. – Xearinox