我使用“Sqlite for Windows Runtime”和sqlite-net(正如http://timheuer.com/blog/archive/2012/08/07/updated-how-to-using-sqlite-from-windows-store-apps.aspx所述)来开发Windows 8 Metro-App。如果我想在程序目录中打开数据库是没有问题的:
var dbPath = Path.Combine(Windows.Storage.ApplicationData.Current.LocalFolder.Path, "db.sqlite");
using (var db = new SQLite.SQLiteConnection(dbPath)) {
...
}
但是当我想使用这样的extern路径时:
var dbPath = "C:\\Users\\xxxxxx\\db.sqlite";
然后“无法打开数据库文件”发生错误。为什么?这里我使用的是C#,通常我使用的是C ++,但对于这个问题我肯定没关系;)
答案 0 :(得分:6)
您无法在文件系统上选择任意文件。有关详细信息,请参阅here。
默认情况下,您可以访问以下位置:
和
此外,您的应用可以访问已连接的部分文件 默认设备。如果您的应用使用AutoPlay Device extension在用户连接设备时自动启动,则可以选择此选项, 像相机或USB拇指驱动器,到他们的系统。您的应用程序的文件 可以访问仅限于通过指定的特定文件类型 应用程序清单中的文件类型关联声明。当然, 您还可以访问可移动设备上的文件和文件夹 调用文件选择器(使用FileOpenPicker和FolderPicker)和 让用户选择要访问的应用程序的文件和文件夹。学习 如何在Quickstart: Accessing files with file pickers.
中使用文件选择器
如果您声明了正确的功能,您也可以访问:
需要以下功能的组合。 家庭和工作网络能力:
至少有一个互联网和公共网络功能:
InternetClient InternetClientServer
如果适用,还有域凭据功能:
注意您必须在应用清单中添加文件类型关联,以声明您的应用可以在此位置访问的特定文件类型。
答案 1 :(得分:1)
在windows metro应用程序中... 它仅支持应用程序的沙箱属性。
所以你不能使用
var dbPath = "C:\\Users\\xxxxxx\\db.sqlite";
U只能将数据存储在本地存储或应用程序安装目录中。
请避免使用任何其他路径。它不会起作用。