質問

フォルダを削除したい 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 機能しません。


追伸:

以下を直接実行すると、機能するようになりました。問題は、ユーザーに依存しないようにしたいことです。

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"));

二重 null 終了を確実にしたい場合は、 ディレクトリ 変数:

dir[MAX_PATH - 1] = 0;
dir[MAX_PATH - 2] = 0;
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top