Reading/Writing SQLite3 数据库到 OneDrive with WinRT 8.1

Reading/Writing SQLite3 database to OneDrive with WinRT 8.1

我在使 SQLite3 数据库与 OneDrive 一起工作时遇到问题。我没有问题 运行 来自 ApplicationData.Current.RoamingFolder 的数据库,但是当我尝试添加 FolderPicker 以允许用户指定一个文件夹来存储数据库时,我一直得到 CannotOpen 来自 SQLite 的错误。

我正在为文件夹添加一个令牌到 FutureAccessList,如下所示:

// give us a consent to use the folder
var folderPicker = new FolderPicker();
folderPicker.FileTypeFilter.Add("*");
_currentFolder = await folderPicker.PickSingleFolderAsync();

// after that, we can store the folder for future reuse
var pickedFolderToken = StorageApplicationPermissions.FutureAccessList.Add(_currentFolder);
ApplicationData.Current.LocalSettings.Values.Add("FolderTokenSettingsKey", pickedFolderToken);

正如我所说,应用程序在使用 RoamingFolder 时运行良好,但我试图将数据库存储在远程存储上,以便在多个设备之间保持同步。

我最初认为 RoamingFolder 会在多个设备之间同步(只要是登录的是同一个 Microsoft 帐户),但事实并非如此,所以我试图获得它可以与 SkyDrive 或其他一些远程存储服务一起使用。

SQLite3 数据库配置为在数据库不存在时创建该数据库,我已经尝试了两种情况,结果相同 - CannotOpen 在任何一种情况下。有人知道 WinRT 8.1 应用程序是否允许这样做吗?我的另一个选择是将数据库从复制到 RoamingFolder 并从应用程序访问该副本,然后在写入数据库时​​复制回。

SQLite 使用本机 Windows 文件系统 API (Win32),但选择器(如 FolderPicker)和 FutureAccessList 仅使用代理文件系统 API(Windows.Storage ).没有办法同时混合两者。

但是您的漫游文件夹中的项目 应该 被复制到具有相同 Microsoft 帐户的其他设备,尽管这不是即时的。你等了多久才看到它出现?文件有多大?您是否阅读了 this topic 和 MSDN 上的相关项目?

否则,是的,您可以将文件从代理位置复制到应用程序的存储空间,然后修改它,然后在关闭后再次将其复制回来。