我使用XNA,我想將文件保存到Vista的「保存的遊戲」文件夾中。你如何以編程方式找到Vista的「Saved Games」文件夾?
我可以通過Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
獲得類似於「我的文檔」的特殊文件夾,但找不到與「保存的遊戲」文件夾相同的文件夾。我如何到這個文件夾?
我使用XNA,我想將文件保存到Vista的「保存的遊戲」文件夾中。你如何以編程方式找到Vista的「Saved Games」文件夾?
我可以通過Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
獲得類似於「我的文檔」的特殊文件夾,但找不到與「保存的遊戲」文件夾相同的文件夾。我如何到這個文件夾?
http://msdn.microsoft.com/en-us/library/bb200105.aspx#ID2EWD
看起來你需要使用Microsoft.Xna.Framework.Storage和StorageLocation類做你需要什麼。
目前,PC 在標題位置是文件夾,在運行時可執行 所在。使用 TitleLocation屬性可以訪問 路徑。
用戶存儲位於SavedGames文件夾中登錄的用戶的當前 用戶文件夾中的我的文檔 文件夾中。根據titleName傳遞給 的OpenContainer方法,爲每個遊戲 創建一個 子文件夾。當沒有指定 PlayerIndex時,保存在AllPlayers文件夾中的內容是 。當指定 PlayerIndex時,內容 保存在Player1,Player2, Player3或Player4文件夾中,具體取決於 ,PlayerIndex已傳遞到 BeginShowStorageDeviceSelector。
沒有特殊的文件夾常量,因此只需使用系統變量。根據這個維基百科文章Special Folders,保存的遊戲文件夾就是:
保存的遊戲%USERPROFILE%\保存的遊戲Vista的
因此,代碼是:
string sgPath = System.IO.Path.Combine(Environment.GetEnvironmentVariable("USERPROFILE"), "saved games"));
...
編輯:如果根據意見,本地化是一個問題,並根據您的問題,你仍然希望直接訪問保存的遊戲文件夾,而不是使用API,那麼以下可能會有所幫助。
使用展鵬反射,我們可以看到,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用KNOWNFOLDERID替換了CLSIDL。 KNOWFOLDERID的列表可以在here找到。已保存的遊戲KNOWNFOLDERID是FOLDERID_SavedGames。
但是,您不只是將新的const傳遞給舊的,基於CLSIDL的SHGetFolderPath Win32函數。根據這篇文章Known Folders,正如您所預料的那樣,有一個新函數叫做SHGetKnownFolderPath,您傳遞了新的FOLDERID_SavedGames常量,並且將以本地化的形式返回到保存的遊戲文件夾的路徑。
當遊戲運行在不是英語的系統上時? KABOOM! – Samuel 2009-04-09 02:54:52
公平的說,維基百科文章說'已保存的遊戲'應該被本地化。 – Craig 2009-04-09 02:56:33
@克雷格:你知道微軟使用他們支持的每種語言嗎?爲什麼甚至試圖學習,當你可以使用提供的API? – Samuel 2009-04-09 02:59:33