在Windows 8 Metro-App中打开外部SQLite-Database?

时间:2012-08-31 18:27:14

标签: c# c++ sqlite windows-8 microsoft-metro

我使用“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 ++,但对于这个问题我肯定没关系;)

2 个答案:

答案 0 :(得分:6)

您无法在文件系统上选择任意文件。有关详细信息,请参阅here

默认情况下,您可以访问以下位置:

  • 应用程序安装目录
  • 应用程序数据位置
  • 用户的下载文件夹

  

此外,您的应用可以访问已连接的部分文件   默认设备。如果您的应用使用AutoPlay Device extension在用户连接设备时自动启动,则可以选择此选项,   像相机或USB拇指驱动器,到他们的系统。您的应用程序的文件   可以访问仅限于通过指定的特定文件类型   应用程序清单中的文件类型关联声明。当然,   您还可以访问可移动设备上的文件和文件夹   调用文件选择器(使用FileOpenPickerFolderPicker)和   让用户选择要访问的应用程序的文件和文件夹。学习   如何在Quickstart: Accessing files with file pickers.

中使用文件选择器

如果您声明了正确的功能,您也可以访问:

  

需要以下功能的组合。   家庭和工作网络能力:

     

PrivateNetworkClientServer

     

至少有一个互联网和公共网络功能:

     

InternetClient InternetClientServer

     

如果适用,还有域凭据功能:

     

EnterpriseAuthentication

     

注意您必须在应用清单中添加文件类型关联,以声明您的应用可以在此位置访问的特定文件类型。

答案 1 :(得分:1)

在windows metro应用程序中... 它仅支持应用程序的沙箱属性。

所以你不能使用

var dbPath = "C:\\Users\\xxxxxx\\db.sqlite";

U只能将数据存储在本地存储或应用程序安装目录中。

请避免使用任何其他路径。它不会起作用。