public string [] GetSubKeyNames ()
{
DirectoryInfo selfDir = new DirectoryInfo (ActualDir);
DirectoryInfo[] subDirs = selfDir.GetDirectories ();
string[] subKeyNames;
// for volatile keys (cannot contain non-volatile subkeys) or keys
// without *any* presence in the volatile key section, we can do it simple.
if (IsVolatile || !Directory.Exists (GetVolatileDir (Dir))) {
subKeyNames = new string[subDirs.Length];
for (int i = 0; i < subDirs.Length; i++) {
DirectoryInfo subDir = subDirs[i];
subKeyNames[i] = subDir.Name;
}
return subKeyNames;
}
// We may have the entries repeated, so keep just one of each one.
DirectoryInfo volatileDir = new DirectoryInfo (GetVolatileDir (Dir));
DirectoryInfo [] volatileSubDirs = volatileDir.GetDirectories ();
Dictionary<string,string> dirs = new Dictionary<string,string> ();
foreach (DirectoryInfo dir in subDirs)
dirs [dir.Name] = dir.Name;
foreach (DirectoryInfo volDir in volatileSubDirs)
dirs [volDir.Name] = volDir.Name;
subKeyNames = new string [dirs.Count];
int j = 0;
foreach (KeyValuePair<string,string> entry in dirs)
subKeyNames[j++] = entry.Value;
return subKeyNames;
}