我在使用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
并从应用程序访问该副本,然后在写入数据库时复制回来。
答案 0 :(得分:1)
SQLite适用于本机Windows文件系统API(Win32),但选择器(如FolderPicker
)和FutureAccessList
仅适用于代码文件系统API(Windows.Storage
)。没有办法同时混合这两者。
但漫游文件夹中的项目应该被复制到具有相同Microsoft帐户的其他设备,尽管它不是即时的。你等了多久才知道它是否出现了?文件有多大?您是否在MSDN上阅读了this topic及相关项目?
否则,是的,您可以将文件从代理位置复制到应用程序的存储中,然后对其进行修改,然后在关闭后再将其复制回来就可以了。