.NET TIPS

Windowsのシステム・フォルダのパスを取得するには?

デジタルアドバンテージ
2003/05/30

 Windowsでは、「Program Files」や「デスクトップ」、「スタート メニュー」など、システムで固定の名前を持つ特別な「システム・フォルダ」が存在する。アプリケーションによっては、このようなシステム・フォルダにあるファイルを読み込んだり、設定ファイルやショートカットを作成したい場合があるが、システム・フォルダの位置はWindowsをインストールしたドライブや、Windowsでの設定によりマシンごとに異なる。そのため.NET Frameworkのクラス・ライブラリでは、システム・フォルダの絶対パスを取得するクラスが用意されている。

 システム・フォルダへのパスを取得するには、Environmentクラス(System名前空間)のGetFolderPathメソッドを使用する。例えば次のコードは、一般的なアプリケーションをインストールするための「Program Files」ディレクトリのパスを取得する(CドライブにWindowsをインストールしている場合には、これは通常「C:\Program Files」となる)。

string p = Environment.GetFolderPath(
                Environment.SpecialFolder.ProgramFiles);

 GetFolderPathメソッドのパラメータには、Environment.SpecialFolder列挙体(System名前空間)の値を1つ指定する。列挙体の名前に「.」が含まれているのは、この列挙体がEnvironmentクラスの中で定義されているためだ(このような型は「入れ子になった型:Nested Type」と呼ばれる)。これは、この列挙体がEnvironmentクラスのメソッドでしか使用されないことを示唆している。

 次のサンプル・プログラムは、「TIPS:列挙体の値を列挙するには?」で示した方法により、Environment.SpecialFolder列挙体のすべての値と、それをパラメータに指定してGetFolderPathメソッドを呼び出した場合に返される文字列を順に表示する。

// spfolder.cs

using System;
using SPFolder = System.Environment.SpecialFolder;

class EnumSpecialFolder {
  public static void Main() {

    foreach (SPFolder sp
                  in Enum.GetValues(typeof(SPFolder))) {

      Console.WriteLine("{0}, {1}",
          sp, Environment.GetFolderPath(sp));
    }
  }
}
// コンパイル方法:csc spfolder.cs
システム・フォルダの絶対パスを一覧表示するC#のサンプル・プログラム(spfolder.cs)

 なお、このサンプル・プログラムでは「Environment.SpecialFolder」と何度も記述するとプログラムが読みにくくなるため、usingディレクティブにより列挙体に「SPFolder」という別名を付けて記述している。using(Visual Basic .NETでは「Imports」)は、「using System;」のように名前空間をインポートするのによく使用されるが、このようにクラスや列挙体に別名を付ける(エイリアスを作成する)機能も持っている。

 上記のサンプル・プログラムを筆者のPC(ユーザー名は「taka-e」)で実行した結果は次のようになった。プログラムの出力はそのままでは読みづらいので、ここでは表にまとめている。

列挙体の値 取得される文字列(例)
Desktop C:\Documents and Settings\taka-e\デスクトップ
Programs C:\Documents and Settings\taka-e\スタート メニュー\プログラム
Personal C:\Documents and Settings\taka-e\My Documents
Favorites C:\Documents and Settings\taka-e\Favorites
Startup C:\Documents and Settings\taka-e\スタート メニュー\プログラム\スタートアップ
Recent C:\Documents and Settings\taka-e\Recent
SendTo C:\Documents and Settings\taka-e\SendTo
MyMusic C:\Documents and Settings\taka-e\My Documents\My Music
StartMenu C:\Documents and Settings\taka-e\スタート メニュー
MyComputer (値なし)
DesktopDirectory C:\Documents and Settings\taka-e\デスクトップ
Templates C:\Documents and Settings\taka-e\Templates
ApplicationData C:\Documents and Settings\taka-e\Application Data
LocalApplicationData C:\Documents and Settings\taka-e\Local Settings\Application Data
InternetCache C:\Documents and Settings\taka-e\Local Settings\Temporary Internet Files
Cookies C:\Documents and Settings\taka-e\Cookies
History C:\Documents and Settings\taka-e\Local Settings\History
CommonApplicationData C:\Documents and Settings\All Users\Application Data
System C:\WINDOWS\System32
ProgramFiles C:\Program Files
MyPictures C:\Documents and Settings\taka-e\My Documents\My Pictures
CommonProgramFiles C:\Program Files\Common Files
サンプル・プログラムの実行結果

 なお、列挙体の各値についての詳細は、リファレンス・マニュアルのEnvironment.SpecialFolder列挙体の項目に記述されている。End of Article

カテゴリ:クラス・ライブラリ 処理対象:Windows環境
使用キーワード:usingディレクティブ
使用ライブラリ:Environmentクラス(System名前空間)
関連TIPS:列挙体の値を列挙するには?

この記事と関連性の高い別の.NET TIPS
列挙体の値を列挙するには?
列挙体の名前を列挙するには?
メッセージ・ボックスを表示するには?
整数や文字列を列挙体に変換するには?[C#/VB]
[フォルダの参照]ダイアログを使用するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

更新履歴
【2003/08/19】 本ページ内の表「サンプル・プログラムの実行結果」にDesktop、MyMusic、MyComputer、MyPicturesの項目が抜けていました。お詫びして訂正させていただきます。

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間