Работа с файлами в MonoGame и Android

Итак, я сделал игру в XNA и, чтобы получить баллы из файла, делаю что-то вроде этого...

private void GetScore()
    {
        if (File.Exists(scoreFilename))
        {
            using (StreamReader sr = new StreamReader(scoreFilename))
            {
                hiScore = Convert.ToInt16(sr.ReadLine());
            }
        }
        else
        {
            FileStream fs = File.Create(scoreFilename);
            fs.Close();
            using (StreamWriter sw = new StreamWriter(scoreFilename))
            {
                sw.Write("0");
            }
            hiScore = 0;
        }
    }

Это работает в Windows, но как мне сделать это для Android?


person Fake Name    schedule 24.08.2013    source источник


Ответы (2)


Я думаю, вы ищете IsolatedStorageFile. Это должно работать так же, как запись данных на Windows Phone. Ваш новый код может выглядеть примерно так:

private void GetScore()
{
    var store = IsolatedStorageFile.GetUserStoreForApplication();

    if (store.FileExists(scoreFilename))
    {
        var fs = store.OpenFile(scoreFilename, FileMode.Open);
        using (StreamReader sr = new StreamReader(fs))
        {
            hiScore = Convert.ToInt16(sr.ReadLine());
        }
    }
    else
    {        
        var fs = store.CreateFile(scoreFilename);            
        using (StreamWriter sw = new StreamWriter(fs))
        {
            sw.Write("0");
        }
        hiScore = 0;
    }
}

Я не проверял это, и, вероятно, есть способ сделать это с меньшим количеством кода, но у меня нет на это времени, поэтому я изменил ваш код только на минимально необходимую сумму. Дайте мне знать, как это происходит.

person craftworkgames    schedule 25.08.2013
comment
Работает, спасибо, не знал про IsolatedStorage, полезная штука. - person Fake Name; 25.08.2013

Вы также можете использовать внешний каталог следующим образом:

Определите класс для хранения контекста:

public class App
{        
    public static Context CurentContext { get; set; }
}

В основной деятельности запустите контекст:

public class Activity1 : Microsoft.Xna.Framework.AndroidGameActivity
    {
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);            

            App.CurentContext = this;

            var g = new Game1();
            SetContentView((View)g.Services.GetService(typeof(View)));
            g.Run();
        }
    }

Затем выполните доступ к внешнему каталогу:

var dirPath = App.CurentContext.GetExternalFilesDir(string.Empty).AbsolutePath;
string filePath = Path.Combine(dirPath, "YourScoreFileName.txt");
using (var stream = File.OpenRead(filePath))
{

}

И файл должен храниться в таком месте:

/storage/emulated/0/Android/data/[your_package]/files/
person Minh Nguyen    schedule 30.09.2015