使用WinRT 8.1读取/写入SQLite3数据库到OneDrive

时间:2015-01-25 20:14:36

标签: c# sqlite windows-runtime windows-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并从应用程序访问该副本,然后在写入数据库时​​复制回来。

1 个答案:

答案 0 :(得分:1)

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

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

否则,是的,您可以将文件从代理位置复制到应用程序的存储中,然后对其进行修改,然后在关闭后再将其复制回来就可以了。