我正在构建一个Windows 8应用程序,使用sql-net和mvvmcross来访问sqlite数据库的数据。这将适用于任何Win-8或Win手机应用程序。
我需要安装一个现有的sqlite文件在应用程序启动。
当使用连接时,使用如下语法
public FlashCardManager(ISQLiteConnectionFactory factory, IMvxMessenger messenger)
{
_messenger = messenger;
_connection = factory.Create("Dictionary.sqlite");
_connection.CreateTable<FlashCardSet>();
_connection.CreateTable<FlashCard>();
}
public void CreateCard(FlashCard flashCard)
{
_connection.Insert(flashCard);
}该连接在: C:\Users\USER\AppData\Local\Packages\793fd702-171e-474f-ab3b-d9067c58709b_ka9b83fa3fse2\LocalState中创建一个文件
我的应用程序使用了我创建的现有sqlite数据库文件。安装应用程序时,我需要将它放在这个文件夹中。我该怎么做呢?
谢谢,JH
发布于 2013-09-14 21:10:00
确保您有一个应用程序文件夹中的数据库文件(如在visual studio解决方案资源管理器中可见的文件夹)。在本例中,我将此文件夹称为“资产”
那么,您所需要做的就是在应用程序第一次运行时将该文件复制到LocalState文件夹。这可以在App.xaml.cs中完成
private async void InitializeAppEnvironment()
{
try
{
if (!(await AppHelper.ExistsInStorageFolder(AppHelper.localFolder, dbName)))
{
StorageFile defaultDb = await AppHelper.installedLocation.GetFileAsync("Assets\\" + dbName);
await defaultDb.CopyAsync(AppHelper.localFolder);
}
}
catch (Exception e)
{
System.Diagnostics.Debug.WriteLine(e);
}
}为了简化对应用程序数据文件夹的访问,我创建了一个AppHelper类,下面是我在上面使用的部分:
static class AppHelper
{
public static StorageFolder installedLocation = Windows.ApplicationModel.Package.Current.InstalledLocation;
public static StorageFolder localFolder = ApplicationData.Current.LocalFolder;
public static async Task<bool> ExistsInStorageFolder(this StorageFolder folder, string fileName)
{
try
{
await folder.GetFileAsync(fileName);
return true;
}
catch (FileNotFoundException)
{
return false;
}
}
}发布于 2013-09-15 17:10:15
关于MVVM交叉的更详细的响应,我在本文中找到了当前关于跨平台文件放置的讨论:Link
当前的想法是,您必须为这种功能注入特定于平台的代码。
https://stackoverflow.com/questions/18806254
复制相似问题