首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Windows存储应用程序将SQLite文件放在LocalState文件夹中

Windows存储应用程序将SQLite文件放在LocalState文件夹中
EN

Stack Overflow用户
提问于 2013-09-14 20:46:24
回答 2查看 1.3K关注 0票数 1

我正在构建一个Windows 8应用程序,使用sql-net和mvvmcross来访问sqlite数据库的数据。这将适用于任何Win-8或Win手机应用程序。

我需要安装一个现有的sqlite文件在应用程序启动。

当使用连接时,使用如下语法

代码语言:javascript
复制
 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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-14 21:10:00

确保您有一个应用程序文件夹中的数据库文件(如在visual studio解决方案资源管理器中可见的文件夹)。在本例中,我将此文件夹称为“资产”

那么,您所需要做的就是在应用程序第一次运行时将该文件复制到LocalState文件夹。这可以在App.xaml.cs中完成

代码语言:javascript
复制
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类,下面是我在上面使用的部分:

代码语言:javascript
复制
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;
        }
    }
}
票数 5
EN

Stack Overflow用户

发布于 2013-09-15 17:10:15

关于MVVM交叉的更详细的响应,我在本文中找到了当前关于跨平台文件放置的讨论:Link

当前的想法是,您必须为这种功能注入特定于平台的代码。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18806254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档