我有一个Xamarin项目。在我的UWP项目的根目录中,我存储了一个sqlite文件,该文件具有我的应用程序所需的初始表。我设置了' 构建操作'到' 内容'。我找到的所有示例都在' ApplicationData.Current.LocalFolder.Path '中查找该文件,但是当我运行该应用时,该文件夹中没有任何内容。一切都在Debug文件夹中创建。我应该使用不同的路径进行调试和发布吗?存储如何工作?应用程序是否在UWP中沙盒化?
答案 0 :(得分:0)
我找到的所有示例都在“ApplicationData.Current.LocalFolder.Path”中查找该文件,但是当我运行该应用时,该文件夹中没有任何内容
是的,您设置的sqlite文件只是UWP应用程序的内容,我们需要在第一次运行时以编程方式将其复制到LocalFolder。使用StorageFile.CopyAsync()
方法将文件复制到特定位置
请参阅此Sunteen
中的question的回答另一个位置是可以读/写的应用程序数据位置。您可以将数据库文件从安装目录复制到应用程序数据目录以供使用。以下代码示例用于连接本地文件夹中的数据库文件......
答案 1 :(得分:0)
一般来说,我是如何完成的,
确保已安装this
对于Windows应用程序(UWP,WP8,WP8.1等),所有内容文件都应该是 存储在根级别(没有子文件夹。也许有一个解决方法 这是默认的)。对我来说,存储起来非常麻烦 那。因此我创建了一个共享项目来存储sqllite.db和 图像等所有Windows应用程序的共享文件。 设置构建操作=内容并复制到输出目录=不复制
异步方式
var sqliteFilename = "myworkout.db3";
string path=Path.Combine(ApplicationData.Current.LocalFolder.Path,sqliteFilename);
var platform = new SQLite.Net.Platform.WinRT.SQLitePlatformWinRT();
var task = Task.Run(async () => { await CopyDatabase(); });
task.Wait();
var _sqliteConnectionWithLock = new SQLite.Net.SQLiteConnectionWithLock(platform,new SQLite.Net.SQLiteConnectionString(path,false));
var conn = new SQLiteAsyncConnection(()=> _sqliteConnectionWithLock);
同步代码
var sqliteFilename =“mydatabase.db3”;
string path = Path.Combine(ApplicationData.Current.LocalFolder.Path,
sqliteFilename);
var platform = new SQLite.Net.Platform.WinRT.SQLitePlatformWinRT();
var task = Task.Run(async () => { await CopyDatabase(); });
task.Wait();
var conn = new SQLiteConnection(platform,path);