8

上記のように、C を使用して Windows で AppData フォルダーを取得するにはどうすればよいですか?

私はあなたがC#のために使用することを知っていますEnvironment.SpecialFolder.ApplicationData

4

5 に答える 5

13

CSIDLを目的のフォルダー (おそらく CSIDL_APPDATA または CSIDL_LOCAL_APPDATA) に設定して、 SHGetSpecialFolderPathを使用します。

新しいSHGetFolderPath()およびSHGetKnownFolderPath()関数を使用することもできます。SHGetKnownFolderIDList()もあり、COM が好きならIKnownFolder::GetPath()があります。

于 2010-10-18T23:04:00.610 に答える
7

私が正しく思い出せば、それはただのはずです

#include <stdlib.h>
getenv("APPDATA");

編集:再確認しただけで、正常に動作します!

于 2010-10-18T23:03:02.160 に答える
4

環境変数を使用する%APPDATA%と、ほとんどの場合うまくいくでしょう。ただし、これを Windows の公式な方法で行いたい場合は、必要に応じてCSIDL 値またはを渡すSHGetFolderPath関数を使用する必要があります。CSIDL_APPDATACSIDL_LOCAL_APPDATA

これは、Environment.GetFolderPath()メソッドが .NET で使用しているものです。

編集: Joey は、これがWindows Vista でSHGetKnownFolderPathに置き換えられたことを正しく指摘しています。私へのニュース:-)。

于 2010-10-18T23:07:35.533 に答える
1

次の関数を使用できます。

#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);
于 2010-10-18T23:04:29.703 に答える
0

サンプルコード:

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 = ユーザー名\ローカル設定\アプリケーション データ (非ローミング)

于 2016-10-17T15:11:54.623 に答える