它没有特殊的文件夹 const,所以只需使用系统变量。根据这篇维基百科文章Special Folders,保存的游戏文件夹只是:
已保存的游戏 %USERPROFILE%\已保存的游戏 Vista
所以代码是:
string sgPath = System.IO.Path.Combine(Environment.GetEnvironmentVariable("USERPROFILE"), "saved games"));
...
编辑:如果根据 cmets,本地化是一个问题,并且根据您的问题,您仍然希望直接访问 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;
}
因此,也许您认为我需要的只是创建我自己的此方法版本,并将保存的游戏的文件夹 ID 传递给它。那是行不通的。 Vista之前的那些文件夹ID实际上是CSIDL。可以在here 找到它们的列表。但是请注意注意:。
在发布 Vista 时,Microsoft 将 CLSIDL 替换为 KNOWNFOLDERID。可以在here 找到 KNOWNFOLDERID 列表。保存的游戏 KNOWNFOLDERID 是 FOLDERID_SavedGames。
但您不只是将新的 const 传递给旧的、基于 CLSIDL 的 SHGetFolderPath Win32 函数。根据这篇文章,Known Folders,正如您所料,有一个名为 SHGetKnownFolderPath 的新函数,您将新的 FOLDERID_SavedGames 常量传递给该函数,它将以本地化形式返回 Saved Games 文件夹的路径。