Специальной папки const для нее не существует, поэтому просто используйте системные переменные. Согласно этой статье в Википедии Специальные папки , папка сохраненных игр просто:
Сохраненные игры% USERPROFILE% \ Сохраненные игры Vista
Таким образом, код будет:
string sgPath = System.IO.Path.Combine(Environment.GetEnvironmentVariable("USERPROFILE"), "saved games"));
...
РЕДАКТИРОВАТЬ: Если, согласно комментариям, локализация является проблемой, и по вашему вопросу вы все еще хотите получить доступ к папке «Сохраненные игры» напрямую, а не через API, то может помочь следующее:
Используя отражатель RedGate, мы видим, что GetFolderPath реализован следующим образом:
public static string GetFolderPath(SpecialFolder folder)
{
if (!Enum.IsDefined(typeof(SpecialFolder), folder))
{
throw new ArgumentException(string.Format(CultureInfo.CurrentCulture, GetResourceString("Arg_EnumIllegalVal"), new object[] { (int) folder }));
}
StringBuilder lpszPath = new StringBuilder(260);
Win32Native.SHGetFolderPath(IntPtr.Zero, (int) folder, IntPtr.Zero, 0, lpszPath);
string path = lpszPath.ToString();
new FileIOPermission(FileIOPermissionAccess.PathDiscovery, path).Demand();
return path;
}
Так что, может быть, вы думаете, что все, что мне нужно, - это создать свою собственную версию этого метода и передать ей идентификатор папки для сохраненных игр. Это не сработает. Эти идентификаторы папок до Vista были на самом деле CSIDL. Список их можно найти здесь . Обратите внимание на Примечание: однако.
При выпуске Vista Microsoft заменила CLSIDL на KNOWNFOLDERID. Список KNOWNFOLDERID можно найти здесь . А сохраненные игры KNOWNFOLDERID - это FOLDERID_SavedGames.
Но вы не просто передаете новый const старой, основанной на CLSIDL, функции SHGetFolderPath Win32. Согласно этой статье, Известные папки , и, как и следовало ожидать, есть новая функция под названием SHGetKnownFolderPath , в которую вы передаете новую константу FOLDERID_SavedGames, которая возвращает путь к сохраненному Папка с играми в локализованном виде.