Скопируйте БД из ресурсов xamarin iOS - PullRequest
0 голосов
/ 21 апреля 2020

В Xamarin.Android проекте для извлечения файлов (БД), установленных как AndroidResource из Assets folder, скопируйте их в Personal folder, я сделал что-то подобное в MainActivity.cs:

        protected override void OnCreate(Bundle savedInstanceState)
        {
            //...
            LoadApplication(new App());

            //Database
            ExtractDBFromAssets(dbname: "Italiano.db");
            ExtractDBFromAssets(dbname: "Inglese.db");
            ExtractDBFromAssets(dbname: "Francese.db");

        }

        public void ExtractDBFromAssets(string dbname)
        {
            string destination = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
            string filename = System.IO.Path.Combine(destination, dbname);

            if (!System.IO.File.Exists(filename))
            {
                using (FileStream writeStream = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.Write))
                {
                    Assets.Open(dbname).CopyTo(writeStream);
                }
            }
        }

Теперь, предполагая, что я также сохранил те же файлы внутри Resources folder в Xamarin.iOS и установил их как BundleResource, , как я могу достичь того же результата, что и в Android файле ?

Я пробовал это в AppDelegate.cs, но, похоже, не работает:

public override bool FinishedLaunching(UIApplication app, NSDictionary options)
        {
            //...
            LoadApplication(new App());

            //Database
            ExtractBDFromResources("Italiano", "db");
            ExtractBDFromResources("Inglese", "db");
            ExtractBDFromResources("Francese", "db");

            return base.FinishedLaunching(app, options);
        }

        public static void ExtractBDFromResources(string dbname, string type)
        {
            string destination = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
            string filename = System.IO.Path.Combine(destination, dbname);

            if (!File.Exists(filename))
            {
                System.IO.File.Copy(NSBundle.MainBundle.PathForResource(dbname, type), filename);
            }
        }

Спасибо за вашу помощь

...