Recipe 11.16 Parsing Paths in Environment Variables
Problem
You need to parse
multiple paths contained in environment variables, such as
PATH or Include.
Solution
You can use the
Path.PathSeparator
field or the ; character to extract individual
paths from an environment variable whose value consists of multiple
paths, and place them in an array. Then you can use a
foreach loop to iterate over each individual path
in the PATH environment variable and parse each
path. This process is illustrated by the
ParsePathEnvironmentVariable
method:
public static void ParsePathEnvironmentVariable( )
{
string originalPathEnv = Environment.GetEnvironmentVariable("PATH");
string[] paths = originalPathEnv.Split(new char[1] {Path.PathSeparator});
foreach (string s in paths)
{
string pathEnv = Environment.ExpandEnvironmentVariables(s);
Console.WriteLine("Path = " + pathEnv);
if(pathEnv.Length > 0)
{
Console.WriteLine("Individual Path = " + pathEnv);
}
else
{
Console.WriteLine("Skipping blank environment path details " +
" as it causes exceptions...");
}
Console.WriteLine( );
}
}
If the PATH environment variable contains the
following:
PATH=Path=C:\WINDOWS\system32;C:\WINDOWS
then the output of the
ParsePathEnvironmentVariable method is as follows:
Path = C:\WINDOWS\system32
GetDirectoryName = C:\WINDOWS
GetExtension =
GetFileName = system32
GetFileNameWithoutExtension = system32
GetFullPath = C:\WINDOWS\system32
GetPathRoot = C:\
HasExtension = False
IsPathRooted = True
Path = C:\WINDOWS
GetDirectoryName = C:\
GetExtension =
GetFileName = WINDOWS
GetFileNameWithoutExtension = WINDOWS
GetFullPath = C:\WINDOWS
GetPathRoot = C:\
HasExtension = False
IsPathRooted = True
Discussion
When working with environment variables in particular, there are a
number of cases in which several paths may be concatenated together
and you need to parse each one individually. To distinguish each
individual path from the others, Microsoft Windows uses the semicolon
character. (Other operating systems might use a different character;
Unix, Linux, and Mac OS X use a colon.) To make sure that we always
use the correct path separation character, the
Path class contains a public static field called
PathSeparator. This
field contains the character used to separate paths in the current
platform. This field is marked as read-only, so it cannot be
modified.
To
obtain each individual path contained in a single string, use the
Split instance method from the
String class. This method accepts a
param array of character values that are used to
break apart the string instance. These individual strings containing
the paths are returned in a string array. We can then simply use the
foreach loop construct to iterate over each string
in this string array, and we can use the various static methods of
the Path class to operate on each individual path
string.
See Also
See the "Path Class" and
"Environment Class" topics in the
MSDN documentation.
|