2009-04-09 11 views
1

私はXNAを使用しており、Vistaの「Saved Games」フォルダにファイルを保存したいとします。Vistaの「Saved Games」フォルダをプログラム的に見つけるにはどうすればよいですか?

マイドキュメントのような特別なフォルダをEnvironment.GetFolderPath(Environment.SpecialFolder.MyDocuments)で取得できますが、[保存されたゲーム]フォルダと同等のものは見つかりません。どうすればこのフォルダにアクセスできますか?

答えて

2

http://msdn.microsoft.com/en-us/library/bb200105.aspx#ID2EWD

あなたがする必要が何をしMicrosoft.Xna.Framework.Storageと記憶場所のクラスを使用する必要がありますように見えます。

現在、PC 上のタイトルの場所は、それが実行されたときに実行可能 が存在するフォルダです。 のTitleLocationプロパティを使用して、 パスにアクセスします。

ユーザーストレージは、現在 にログインしているユーザーのMy Documents フォルダに、SavedGamesフォルダにあります。 サブフォルダは、 OpenContainerメソッドに渡されたtitleNameに従って、各ゲームに対して作成されます。 PlayerIndexが指定されていない場合、コンテンツはAllPlayersフォルダに保存されている です。 PlayerIndexが指定されている場合、コンテンツ は、PlayerIndexが BeginShowStorageDeviceSelectorに渡された に応じて、Player1、Player2、 Player3、またはPlayer4フォルダに保存されます。

0

特殊なフォルダconstはありませんので、システム変数を使用してください。このWikipediaの記事Special Foldersによると、保存されたゲームのフォルダだけです:

保存されたゲーム%USERPROFILE%\保存されたゲームは、Vistaの

だからコードは次のようになります。

string sgPath = System.IO.Path.Combine(Environment.GetEnvironmentVariable("USERPROFILE"), "saved games")); 

...

EDIT:コメントごとにローカリゼーションが問題となり、APIを使用するのではなくSaved Gamesフォルダに直接アクセスしたい場合は、次の点が役立ちます。私たちは次のように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に置き換えました。 KNOWNFOLDERIDのリストはhereです。保存されたゲームのKNOWNFOLDERIDはFOLDERID_SavedGamesです。

しかし、新しいconstを古いCLSIDLベースのSHGetFolderPath Win32関数に渡すだけではありません。この資料の通り、Known Foldersのとおり、新しいFOLDERID_SavedGames定数を渡したSHGetKnownFolderPathという新しい関数があり、これはローカライズされた形式のSaved Gamesフォルダへのパスを返します。

+1

英語ではないシステムでゲームを実行すると、カブム! – Samuel

+0

ウィキペディアの記事では、「保存されたゲーム」はローカライズされていると言います。 – Craig

+0

@Craig:マイクロソフトがサポートする言語ごとにどのようなものが使用されているかを知っていますか?なぜ、あなたが提供されたAPIを使用できるのかを知ろうとするのですか? – Samuel

関連する問題