0

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。したがって、構造体に二重のnullで終了する文字列が必要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ません。


ps:

次のことを直接行うと、動作するようになりました。問題は、ユーザーに依存しないようにしたいということです。

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

1 に答える 1

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;
于 2012-07-25T15:42:42.370 に答える