上記のように、C を使用して Windows で AppData フォルダーを取得するにはどうすればよいですか?
私はあなたがC#のために使用することを知っていますEnvironment.SpecialFolder.ApplicationData
CSIDLを目的のフォルダー (おそらく CSIDL_APPDATA または CSIDL_LOCAL_APPDATA) に設定して、 SHGetSpecialFolderPathを使用します。
新しいSHGetFolderPath()およびSHGetKnownFolderPath()関数を使用することもできます。SHGetKnownFolderIDList()もあり、COM が好きならIKnownFolder::GetPath()があります。
私が正しく思い出せば、それはただのはずです
#include <stdlib.h>
getenv("APPDATA");
編集:再確認しただけで、正常に動作します!
環境変数を使用する%APPDATA%
と、ほとんどの場合うまくいくでしょう。ただし、これを Windows の公式な方法で行いたい場合は、必要に応じてCSIDL 値またはを渡すSHGetFolderPath
関数を使用する必要があります。CSIDL_APPDATA
CSIDL_LOCAL_APPDATA
これは、Environment.GetFolderPath()
メソッドが .NET で使用しているものです。
編集: Joey は、これがWindows Vista でSHGetKnownFolderPathに置き換えられたことを正しく指摘しています。私へのニュース:-)。
次の関数を使用できます。
#include <stdlib.h>
char *getenv(
const char *varname
);
wchar_t *_wgetenv(
const wchar_t *varname
);
そのようです:
#include <stdio.h>
char *appData = getenv("AppData");
printf("%s\n", appData);
サンプルコード:
TCHAR szPath[MAX_PATH];
if (SUCCEEDED(SHGetFolderPath(NULL,
CSIDL_APPDATA | CSIDL_FLAG_CREATE,
NULL,
0,
szPath)))
{
PathAppend(szPath, TEXT("MySettings.xml"));
HANDLE hFile = CreateFile(szPath, ...);
}
CSIDL_APPDATA = ユーザー名\アプリケーション データ。Window 10 の場合: username\AppData\Roaming
CSIDL_FLAG_CREATE = CSIDL_ 値と組み合わせて、SHGetFolderPath() で強制的にフォルダーを作成します
以下も使用できます。
CSIDL_LOCAL_APPDATA = ユーザー名\ローカル設定\アプリケーション データ (非ローミング)