none
"Value does not fall within the expected range." lors de la vérification d'un dossier RRS feed

  • Discussion générale

  • Bonsoir/Bonjour tous le monde !

    Je créé ce post parce que ça fais plusieurs semaines que je bloque sur un problème vraiment bête. Premièrement une petite introduction : J'ai créé et publié une application "MC Addons Manager" sur Xbox et Windows 10, cette application permet de gérer les ressources actuellement présentes dans le jeu vidéo Minecraft.

    Elle trouve le dossier local du jeu, et tous ses sous dossiers puis y récupère/copie des données.

    Et c'est là que le problème arrive : Certains des utilisateurs de l'application ont reportés un crash au démarrage de l'application sans raison, et de mon côté j'ai vu sur AppCenter une erreur comme celle-ci :

    <CheckIfGameFolderExists>d__15.MoveNext()System.ArgumentException: Value does not fall with the expected range.

    J'ai essayé plusieurs fois de reproduire le problème, mais je n'arrive simplement pas à le reproduire...

    Voilà le code de la fonction qui serait apparemment concernée :

    public async void CheckIfGameFolderExists(string gameFolder)
    		{
    			StorageFolder path;
    			try
    			{
    				path = await StorageFolder.GetFolderFromPathAsync(gameFolder);
    			}
    			catch (FileNotFoundException)
    			{
    				path = null;
    			}
    
    			if (path == null)
    			{
    				ShowBox(resourceLoader.GetString("Error"), resourceLoader.GetString("PathNotExists"), resourceLoader.GetString("Close"));
    			}
    			else 
    			{
    				await path.CreateFolderAsync("minecraftWorlds", CreationCollisionOption.OpenIfExists);
    				await path.CreateFolderAsync("resource_packs", CreationCollisionOption.OpenIfExists);
    				await path.CreateFolderAsync("behavior_packs", CreationCollisionOption.OpenIfExists);
    				await path.CreateFolderAsync("skin_packs", CreationCollisionOption.OpenIfExists);
    			}
    		}

    La valeur de gamePath correspond à un string que j'ai nommé gamepath() et qui est obtenu comme ceci:

    // GET GAME PATH - The path is different between platforms
    public static string GamePath()
    		{
    			string platform = Windows.System.Profile.AnalyticsInfo.VersionInfo.DeviceFamily;
    
    			if (platform == "Windows.Xbox")
    			{
    				return Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) + @"\AppData\Local\Packages\Microsoft.MinecraftUWPConsole_8wekyb3d8bbwe\LocalState\games\com.mojang\";
    			}
    			else
    			{
    				return Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) + @"\AppData\Local\Packages\Microsoft.MinecraftUWP_8wekyb3d8bbwe\LocalState\games\com.mojang\";
    			}
    		}

    Je vérifie la plateforme de l'utilisateur à l'aide de l'analytics, et en fonction de la valeur récupérée, le string est renvoyé avec la bonne adresse. La plupart du temps ça a l'air de fonctionner, comme je l'ai dit plus tôt, je n'ai pas réussi à reproduire le problème avec de multiples tentatives de test.

    Je vous remercie d'avance si quelqu'un aurait une suggestion d'amélioration du code pour éviter cette erreur, ou en tout cas gérer ce cas :)

    mardi 6 octobre 2020 21:08