我有一个Windows 8商店应用,我在其中创建了一个“App_Data”文件夹。我添加了一个sqlite数据库文件,现在我正在尝试获取文件路径来创建连接。
答案 0 :(得分:3)
我将现有的sqlite文件添加到项目的Common文件夹中,然后将Build Action设置为Content。您无法写入此文件,因此需要将其复制到应用程序的本地存储文件夹中。我创建了一个StorageManagement类来在应用程序启动时初始化我的数据库。
public static class StorageManagement
{
public static async Task<bool> DoesFileExistAsync(string file)
{
try
{
await Windows.Storage.ApplicationData.Current.LocalFolder.GetFileAsync(file);
return true;
}
catch
{
return false;
}
}
public static async void InitializeDatabaseAsync()
{
if (!DoesFileExistAsync("MyDb.sqlite").Result)
{
string databaseFile = Path.Combine(Windows.ApplicationModel.Package.Current.InstalledLocation.Path, @"Common\MyDb.sqlite");
StorageFile file = await StorageFile.GetFileFromPathAsync(databaseFile);
await file.CopyAsync(Windows.Storage.ApplicationData.Current.LocalFolder);
}
}
}
如果数据库文件尚未在本地存储文件夹中,则只会从公共文件夹中复制该文件。然后我可以使用本地存储中的文件创建我的sqlite连接。
答案 1 :(得分:1)
一种方法是构造文件的URI,然后使用它来访问文件。
var uri = new Uri("ms-appdata:///local/app_data/database.data");
var file = await StorageFile.GetFileFromApplicationUriAsync(uri);
另一种方法是使用ApplicationData类。
var folder = await ApplictionData.Current.LocalFolder.GetFolderAsync("app_data");
var file = await folder.GetFileAsync("database.data");
答案 2 :(得分:0)
您是否在项目文件夹中创建了此“app_data”文件夹?这不起作用,因为您只能直接访问保存在应用程序隔离存储中的文件,或者您需要用户使用filepicker选择文件,然后才能在应用程序中访问它
答案 3 :(得分:0)
我遇到了类似的问题。我需要从一个文本文件中读取JSON,该文件将作为应用程序的一部分打包,作为我们拥有生成JSON的服务之前的中间步骤。
使用LocalStorage不是这里的答案,InstalledLocation是用来读取作为应用程序一部分打包的文件的东西,如下所示:
var file = await Package.Current.InstalledLocation.GetFileAsync("app_data\\tempjsonfile.json");
String json = await FileIO.ReadTextAsync(file);
这是从我在项目中创建的app_data目录中的json文件中读取的。必备:在JSON文件的属性中,将“构建操作”设置为“内容”,将“复制到输出目录”设置为“始终复制”。