C# Xamarin LiteDB未经授权访问异常

C# Xamarin LiteDB未经授权访问异常,c#,android,xamarin.forms,android-6.0-marshmallow,litedb,C#,Android,Xamarin.forms,Android 6.0 Marshmallow,Litedb,我试图在Xamarin Forms应用程序中使用LiteDB,但是我似乎无法访问该文件的写入或读取 从my MainViewModel.cs调用 我已经向AndroidManifest.xml添加了权限 <uses-sdk android:minSdkVersion="23" android:targetSdkVersion="25" /> <uses-permission android:name="android.permission.INTERNET" /> &l

我试图在Xamarin Forms应用程序中使用LiteDB,但是我似乎无法访问该文件的写入或读取

从my MainViewModel.cs调用

我已经向AndroidManifest.xml添加了权限

<uses-sdk android:minSdkVersion="23" android:targetSdkVersion="25" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
<uses-permission android:name="android.permission.MANAGE_DOCUMENTS" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_LOGS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_PROFILE" />
<uses-permission android:name="android.permission.READ_USER_DICTIONARY" />
<uses-permission android:name="android.permission.READ_SYNC_SETTINGS" />
<uses-permission android:name="android.permission.READ_SOCIAL_STREAM" />
<uses-permission android:name="android.permission.READ_SYNC_STATS" />
<uses-permission android:name="android.permission.REBOOT" />
<uses-permission android:name="android.permission.RESTART_PACKAGES" />
<uses-permission android:name="android.permission.SET_ORIENTATION" />
<uses-permission android:name="android.permission.SET_DEBUG_APP" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_PROFILE" />
<uses-permission android:name="android.permission.WRITE_GSERVICES" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
然而,该代码失败了

string documentsPath = Android.OS.Environment.ExternalStorageDirectory.AbsolutePath;
var dirPath = documentsPath + "/MyData/MyDB.db";
if (!Directory.Exists(dirPath))
{
    Directory.CreateDirectory(dirPath);
}

using (var db = new LiteDatabase(dirPath))
{
    // Get customer collection
    var collection = db.GetCollection<T>(typeof(T).Name);
    collection.Insert(tobj);
    return true;
}
string documentsPath=Android.OS.Environment.ExternalStorageDirectory.AbsolutePath;
var dirPath=documentsPath+“/MyData/MyDB.db”;
如果(!Directory.Exists(dirPath))
{
CreateDirectory(dirPath);
}
使用(var db=new LiteDatabase(dirPath))
{
//获取客户收集
var collection=db.GetCollection(typeof(T).Name);
收款。插入(tobj);
返回true;
}

您需要在Android中使用以下代码来访问存储/访问您的文件:

var documentsPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
var dirPath = Path.Combine(documentsPath, "MyDB.db");

如果我使用repository模式,一切都很好

using (var db = new LiteRepository("/storage/emulated/0/MyData/MyDB.db"))
{
    db.Insert(new TestClass {Id = 1});
}
LiteDB存储库模式

您确定/storage/emulated在任何情况下都能工作吗?我不确定,但会确保我有读写外部存储的权限,并使用Android.OS.Environment.ExternalStorageDirectory.AbsolutePath获取路径
using (var db = new LiteRepository("/storage/emulated/0/MyData/MyDB.db"))
{
    db.Insert(new TestClass {Id = 1});
}