В 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);
}
}
Спасибо за вашу помощь