スラッシュドット    はてなブックマーク  Yahoo!ブックマークに登録  印刷
 

.NET TIPS

Windowsフォルダのパスやドライブ名を取得するには?

デジタルアドバンテージ
2004/07/30

 「TIPS:Windowsのシステム・フォルダのパスを取得するには?」では、Windowsシステムの特別なフォルダ(SpecialFolder)を取得する方法が紹介されている。

 しかし、この特殊フォルダの中に、Windowsフォルダ(通常は「C:\Windows」)やシステム・ドライブ(通常は「C:」)は含まれていない(特殊フォルダとして取得できる値について詳しくはMSDN「Environment.SpecialFolder 列挙体」を参照されたい)。

 このため、もしWindowsフォルダやシステム・ドライブを取得したい場合には別の手段が必要となる。本稿ではその手段の1つとして、環境変数からWindowsフォルダのパス(環境変数名は「windir」もしくは「SystemRoot」)やドライブ名(環境変数名は「SystemDrive」)を取得する方法を紹介する。

環境変数からWindowsフォルダのパスやドライブ名を取得する方法

 .NET Frameworkで環境変数の値を取得するには、Environmentクラス(System名前空間)のGetEnvironmentVariableメソッドを使えばよい。メソッドの使用方法としては、メソッドの第1パラメータに環境変数名(文字列)を指定して呼び出すと、戻り値としてパスやドライブ名などを文字列として取得できる。

 次のサンプル・プログラムは、GetEnvironmentVariableメソッドを使って環境変数からWindowsフォルダやシステム・ドライブを取得するコードである。

using System;

public class WindowsSystemPath
{
  static void Main()
  {
    string winDir =
      Environment.GetEnvironmentVariable("windir");
    string systemRoot =
      Environment.GetEnvironmentVariable("SystemRoot");
    string systemDrive =
      Environment.GetEnvironmentVariable("SystemDrive");

    Console.WriteLine(winDir);     
    // 出力例:「C:\WINDOWS」(NT系OSおよび9x系OSで有効)

    Console.WriteLine(systemRoot); 
    // 出力例:「C:\WINDOWS」(NT系でのみ有効)

    Console.WriteLine(systemDrive);
    // 出力例:「C:」(NT系でのみ有効)


    // Windowsディレクトリから、システム・ドライブを抽出
    if (winDir.Length >= 2)
    {
      string extractedSystemDrive;
      extractedSystemDrive = winDir.Substring(0, 2);
      Console.WriteLine(extractedSystemDrive);
      //出力例:「C:」(NT系および9x系で有効)

    }
  }
}
環境変数からWindowsフォルダやシステム・ドライブを取得するサンプル・プログラム(C#)
 
Module WindowsSystemPath
  Sub Main()
    Dim winDir As String = _
      Environment.GetEnvironmentVariable("windir")
    Dim systemRoot As String = _
      Environment.GetEnvironmentVariable("SystemRoot")
    Dim systemDrive As String = _
      Environment.GetEnvironmentVariable("SystemDrive")

    Console.WriteLine(winDir)      
    ' 出力例:「C:\WINDOWS」(NT系OSおよび9x系OSで有効)

    Console.WriteLine(systemRoot)  
    ' 出力例:「C:\WINDOWS」(NT系でのみ有効)

    Console.WriteLine(systemDrive) 
    ' 出力例:「C:」(NT系でのみ有効)


    ' Windowsディレクトリから、システム・ドライブを抽出

    If winDir.Length >= 2 Then
      Dim extractedSystemDrive As String
      extractedSystemDrive = winDir.Substring(0, 2)
      Console.WriteLine(extractedSystemDrive)
      ' 出力例:「C:」(NT系および9x系で有効)

    End If
  End Sub
End Module
環境変数からWindowsフォルダやシステム・ドライブを取得するサンプル・プログラム(VB.NET)

 上記のサンプル・プログラムを参照すると分かるように、環境変数からWindowsフォルダやシステム・ドライブを取得する場合、WindowsのOSバージョンごとに環境変数の定義が異なる場合があることに注意しなければならない。

 例えば、「SystemDrive」や「SystemRoot」という環境変数は、NT系OSでは標準サポートされているが、9x系OSではサポートされていない。よって9x系OSでは、「SystemRoot」の代わりに「windir」という環境変数を使わねばならず、「SystemDrive」に至ってはそれに代わる環境変数すらないので注意してほしい(環境変数については、「Windos TIPS:OSの種類によってバッチ・ファイルの処理を切り替える方法」に添付されている「」を参考にするとよい)。

 このようなOS間の差異の問題を回避するため、Windowsフォルダのパスは、現時点では「windir」を使う方がよいだろう。というのも、「windir」は下位互換性のために、NT系OSでも引き続きサポートされているからだ。また、システム・ドライブ名は、「windir」で取得したWindowsフォルダのパスから抽出するとよいだろう。End of Article

カテゴリ:クラス・ライブラリ 処理対象:Windows環境
使用ライブラリ:Environmentクラス(System名前空間)
関連TIPS:Windowsのシステム・フォルダのパスを取得するには?
関連TIPS(Windows):OSの種類によってバッチ・ファイルの処理を切り替える方法
 
この記事と関連性の高い別の.NET TIPS
作業フォルダのパスを取得/設定するには?
一時フォルダ(テンポラリ・フォルダ)を取得するには?
Windows OSの種類やバージョンを判別するには?
[フォルダの参照]ダイアログを使用するには?
アプリケーション設定情報はどこに保存すべきか?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」

ホワイトペーパーTechTargetジャパン

Insider.NET フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

スキルアップ/キャリアアップ(JOB@IT)

- PR -

お勧め求人情報

キャリアアップ 〜JOB@IT

ソリューションFLASHPR