DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

Windowsディレクトリを取得する

ここでは、Windowsディレクトリのパス(通常は、「C:\WINDOWS」)を取得する方法を紹介します。

Environment.GetFolderPathを使用する方法

.NET Framework 4.0からは、Environment.GetFolderPathメソッドにSpecialFolder.Windowsを指定することで取得できます。Environment.GetFolderPathメソッドについて詳しくは、「特殊ディレクトリのパスを取得する」をご覧ください。

VB.NET
コードを隠すコードを選択
'Windowsディレクトリを取得
Dim windir As String = System.Environment.GetFolderPath( _
    System.Environment.SpecialFolder.Windows)
C#
コードを隠すコードを選択
//Windowsディレクトリを取得
string windir = System.Environment.GetFolderPath(
    System.Environment.SpecialFolder.Windows);
補足:.NET Framework 1.0では、裏技として、GetFolderPathメソッドに「0x24」を渡すことでWindowsディレクトリのパスを取得できるようです。この方法は、ニュースグループ「microsoft.public.dotnet.languages.vb」で紹介されていました。
VB.NET
コードを隠すコードを選択
Dim windir As String

'Windowsディレクトリを取得
windir = System.Environment.GetFolderPath( _
    CType(&H24, System.Environment.SpecialFolder))
C#
コードを隠すコードを選択
string windir;

//Windowsディレクトリを取得
windir = 
    System.Environment.GetFolderPath(
        (System.Environment.SpecialFolder) 0x24);

環境変数の値を取得する方法

.NET Framework 3.5以前ではEnvironment.GetFolderPathメソッドが使えませんので、別の方法を考える必要があります。

まず考えられるのは、環境変数で定義されている"windir"の値を取得する方法です。環境変数の値を取得するためには、Environment.GetEnvironmentVariableメソッドまたは、Environment.ExpandEnvironmentVariablesメソッドを使用します。

それぞれのメソッドを使ってWindowsディレクトリのパスを取得する例を示します。

VB.NET
コードを隠すコードを選択
Dim windir As String

'GetEnvironmentVariableメソッドによりWindowsディレクトリを取得
windir = System.Environment.GetEnvironmentVariable("windir")
Console.WriteLine(windir)

'ExpandEnvironmentVariablesメソッドによりWindowsディレクトリを取得
windir = System.Environment.ExpandEnvironmentVariables("%windir%")
Console.WriteLine(windir)
C#
コードを隠すコードを選択
string windir;

//GetEnvironmentVariableメソッドによりWindowsディレクトリを取得
windir = 
    System.Environment.GetEnvironmentVariable("windir");
Console.WriteLine(windir);

//ExpandEnvironmentVariablesメソッドによりWindowsディレクトリを取得
windir = 
    System.Environment.ExpandEnvironmentVariables("%windir%");
Console.WriteLine(windir);

システムディレクトリから推測する方法

また、Windowsディレクトリはシステムディレクトリの親ディレクトリであると考えれば、Environment.GetFolderPathメソッドを使って次のようにできます。

VB.NET
コードを隠すコードを選択
'システムディレクトリを取得
Dim sysdir As String = _
    System.Environment.GetFolderPath( _
        System.Environment.SpecialFolder.System)
'Windowsディレクトリを取得
Dim windir As String = _
    System.IO.Path.GetDirectoryName(sysdir)
Console.WriteLine(windir)
C#
コードを隠すコードを選択
//システムディレクトリを取得
string sysdir =
    System.Environment.GetFolderPath(
        System.Environment.SpecialFolder.System);
//Windowsディレクトリを取得
string windir =
    System.IO.Path.GetDirectoryName(sysdir);
Console.WriteLine(windir);

Win32 APIを使用する方法

また、Win32 APIのGetWindowsDirectory 関数を使用する方法もあります。

VB.NET
コードを隠すコードを選択
<DllImport("kernel32", CharSet:=CharSet.Auto)> _
Private Shared Function GetWindowsDirectory( _
    ByVal buffer As String, _
    ByVal length As Integer) As Integer
End Function

'Windowsディレクトリを取得する
Public Shared Function GetWindowsDirectoryPath() As String
    Dim buf As New String(" "c, 260)
    Dim len As Integer = GetWindowsDirectory(buf, 260)
    Return buf.Substring(0, len)
End Function
C#
コードを隠すコードを選択
[DllImport("kernel32", CharSet=CharSet.Auto)]
private static extern uint GetWindowsDirectory(
    string buffer, uint length);

//Windowsディレクトリを取得する
public string GetWindowsDirectoryPath()
{
    string buf = new string(' ', 260);
    uint len = GetWindowsDirectory(buf, 260);
    return buf.Substring(0, (int) len);
}
  • 履歴:
  • 2013/6/14 「Environment.GetFolderPathを使用する方法」を追加。

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • Windows Vista以降でUACが有効になっていると、ファイルへの書き込みに失敗する可能性があります。詳しくは、こちらをご覧ください。
  • .NET Tipsをご利用いただく際は、注意事項をお守りください。