我有一个 Windows 8 商店应用程序,我在其中创建了一个“App_Data”文件夹。我添加了一个 sqlite 数据库文件,现在我正在尝试获取文件路径以创建连接。
4 回答
我将现有的 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 连接。
一种方法是构造文件的 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");
您是否在项目文件夹中创建了这个“app_data”文件夹?这不起作用,因为您只能直接访问保存在应用程序隔离存储中的文件,或者您需要用户从使用文件选择器中选择文件,然后才能在应用程序中访问它
我遇到了类似的问题。在我们拥有生成 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 文件的属性中,将构建操作设置为“内容”并将复制到输出目录设置为“始终复制”。