0

c:/windows/ フォルダー内の特定のフォントのパスを取得する必要があります。ターゲット フレームワークが 4.0 の場合、以下のコードは完全に機能しますが、アプリケーションは 3.5 しかターゲットにできず、これをコンソール アプリケーションで使用する必要があります。

どうすればこれを達成できますか? ありがとう。

string arialuniTff = path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Fonts), "arial.TTF");

3.5 のエラー メッセージ:「System.Environment.SpecialFolder」に定義が含まれていません

4

2 に答える 2

4

通常、fonts フォルダーは にある%windir%\Fontsため、次のように場所を取得できるはずです。

Path.Combine(
    System.Environment.GetEnvironmentVariable("windir"),
    "Fonts");

これは仮想フォルダーであるため、理論的には別の場所にある可能性があります。実際には、私はそれが起こるのを見たことも聞いたこともありません。(Microsoft は、この場所を「フォントのインストール方法」ページで参照するのに十分な自信を持っています)。ただし、そのような特定のファイル名を見つけようとしている場合は、既に適切なエラー処理が行われていると確信しています。

ボーナス情報:

既にご存知かもしれませんが、特定のバージョンの .net フレームワークで利用できるクラスやメソッドなどを知る必要がある場合は、MSDN で調べることができます。ドキュメンテーション ページ (これはEnvironment.SpecialFolderにあります) に移動し、左上隅にある [.NET Framework 4.5] リンクをクリックし、別のバージョンを選択して、そのバージョンで見ているページを表示します。 .

于 2012-11-28T04:26:25.310 に答える
0

.NET 3.5 で CSIDL_COMMON_DOCUMENTS へのパスを取得する方法を参照してください。

の場所を提供しますconst int CSIDL_COMMON_DOCUMENTS = 0x002e;

Fontsフォルダの場合は、const int CSIDL_FONTS = 0x0014;

それはそのようになります:

[DllImport("shell32.dll"), CharSet = CharSet.Auto]
static extern int SHGetFolderPath(IntPtr hwndOwner, int nFolder, IntPtr hToken, uint dwFlags, [Out] StringBuilder pszPath);

const int CSIDL_FONTS = 0x0014;
const int CSIDL_FLAG_CREATE = 0x8000;

StringBuilder sb = new StringBuilder();

int retVal = SHGetFolderPath(IntPtr.Zero,
                                 CSIDL_FONTS | CSIDL_FLAG_CREATE,
                                 IntPtr.Zero,
                                 0,
                                 sb);
Debug.Assert(retVal >= 0);  // assert that the function call succeeded
String folderLocation = sb.ToString();
于 2016-01-28T14:40:33.370 に答える