我在Visual Studio 2015中创建了一个空白的通用应用程序,只为MainPage
添加了一个按钮。然后,我为按钮创建了click事件处理程序:myButton_Click(...)
。我有以下代码:
void MyTestApp::MainPage::myButton_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
sqlite3 *testDB;
int result = sqlite3_open("file:///C:/Users/MyName/Downloads/testDB.db", &testDB);
myButton->Content = result.ToString();
}
如您所见,我只是尝试创建一个新的db文件,并在按钮上显示sqlite3_open()
函数的结果。不幸的是,我总是得到Code 14: SQLITE_CANTOPEN
。
在Visual Studio中,我通过工具安装了“SQLite for Universal Windows Platform” - &gt;扩展和更新。在解决方案资源管理器下,我将针对UWP的SQLite添加到参考文献中,还包括<sqlite3.h>
标题。
我是否必须为应用分配任何特殊权限,以便它可以创建文件或我做错了什么?
答案 0 :(得分:3)
默认情况下,UWP应用无法在自己的私人位置之外阅读 - 请参阅file access for UWP in MSDN。
您可以使用StorageFile
API访问私有存储区域之外的位置,但它们不适用于需要文件名的SQLite。除了首先将数据库复制到本地存储区域之外,目前无法执行此操作。
答案 1 :(得分:1)
随着彼得托尔的评论,它终于奏效了:
void MyTestApp::MainPage::myButton_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
Windows::Storage::StorageFolder^ f = Windows::Storage::ApplicationData::Current->LocalFolder;
sqlite3 *testDB;
int result = sqlite3_open_v2("C:/Users/MyName/AppData/Local/Packages/538ec661-2ebf-4c45-8845-3a4cb6afd397_4jdacjwc0e74a/LocalState/testDB.db", &testDB, SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE, NULL);
//This works too:
//int result = sqlite3_open_v2("C:\\Users\\MyName\\AppData\\Local\\Packages\\538ec661-2ebf-4c45-8845-3a4cb6afd397_4jdacjwc0e74a\\LocalState\\testDB.db", &testDB, SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE, NULL);
myButton->Content = result.ToString();
//myButton->Content = f->Path;
sqlite3_close(testDB);
}
testDB.db
现在可在您在代码中看到的目录中找到。我之前尝试过类似的代码,但它没有用。标志SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE
似乎有所不同......