ここでは、Windowsディレクトリのパス(通常は、「C:\WINDOWS」)を取得する方法を紹介します。
.NET Framework 4.0からは、Environment.GetFolderPathメソッドにSpecialFolder.Windowsを指定することで取得できます。Environment.GetFolderPathメソッドについて詳しくは、「特殊ディレクトリのパスを取得する」をご覧ください。
'Windowsディレクトリを取得 Dim windir As String = System.Environment.GetFolderPath( _ System.Environment.SpecialFolder.Windows)
//Windowsディレクトリを取得 string windir = System.Environment.GetFolderPath( System.Environment.SpecialFolder.Windows);
補足:.NET Framework 1.0では、裏技として、GetFolderPathメソッドに「0x24」を渡すことでWindowsディレクトリのパスを取得できるようです。この方法は、ニュースグループ「microsoft.public.dotnet.languages.vb」で紹介されていました。
Dim windir As String 'Windowsディレクトリを取得 windir = System.Environment.GetFolderPath( _ CType(&H24, System.Environment.SpecialFolder))
string windir; //Windowsディレクトリを取得 windir = System.Environment.GetFolderPath( (System.Environment.SpecialFolder) 0x24);
.NET Framework 3.5以前ではEnvironment.GetFolderPathメソッドが使えませんので、別の方法を考える必要があります。
まず考えられるのは、環境変数で定義されている"windir"の値を取得する方法です。環境変数の値を取得するためには、Environment.GetEnvironmentVariableメソッドまたは、Environment.ExpandEnvironmentVariablesメソッドを使用します。
それぞれのメソッドを使ってWindowsディレクトリのパスを取得する例を示します。
Dim windir As String 'GetEnvironmentVariableメソッドによりWindowsディレクトリを取得 windir = System.Environment.GetEnvironmentVariable("windir") Console.WriteLine(windir) 'ExpandEnvironmentVariablesメソッドによりWindowsディレクトリを取得 windir = System.Environment.ExpandEnvironmentVariables("%windir%") Console.WriteLine(windir)
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メソッドを使って次のようにできます。
'システムディレクトリを取得 Dim sysdir As String = _ System.Environment.GetFolderPath( _ System.Environment.SpecialFolder.System) 'Windowsディレクトリを取得 Dim windir As String = _ System.IO.Path.GetDirectoryName(sysdir) Console.WriteLine(windir)
//システムディレクトリを取得 string sysdir = System.Environment.GetFolderPath( System.Environment.SpecialFolder.System); //Windowsディレクトリを取得 string windir = System.IO.Path.GetDirectoryName(sysdir); Console.WriteLine(windir);
また、Win32 APIのGetWindowsDirectory 関数を使用する方法もあります。
<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
[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); }
(この記事は、「.NETプログラミング研究 第48号」で紹介したものを基にしています。)