2009-04-09 40 views

回答

2

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。

0

沒有特殊的文件夾常量,因此只需使用系統變量。根據這個維基百科文章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常量,並且將以本地化的形式返回到保存的遊戲文件夾的路徑。

+1

當遊戲運行在不是英語的系統上時? KABOOM! – Samuel 2009-04-09 02:54:52

+0

公平的說,維基百科文章說'已保存的遊戲'應該被本地化。 – Craig 2009-04-09 02:56:33

+0

@克雷格:你知道微軟使用他們支持的每種語言嗎?爲什麼甚至試圖學習,當你可以使用提供的API? – Samuel 2009-04-09 02:59:33

相關問題