我得到下一个错误:System.IO.DirectoryNotFoundException:找不到路径“/storage/emulated/0/Screenshots/test_picture.jpg”的一部分。
测试代码后,以下代码中会出现此错误:
FileStream outStream = new FileStream(file.Path, FileMode.OpenOrCreate);
string root = Android.OS.Environment.ExternalStorageDirectory.AbsolutePath;
,您应该注意到这是
Public external files
.
/存储/模拟/0/文档
从文件中,
所以你需要在这里添加权限
AndroidManifest.xml
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
从android 6.0中,您还需要添加runtimer权限
插件.权限
项目请求权限的NuGet包。如下所示:
OnCreate():
Plugin.CurrentActivity.CrossCurrentActivity.Current.Init(this,savedInstanceState);
try
{
var status = await CrossPermissions.Current.CheckPermissionStatusAsync(Permission.Storage);
if (status != PermissionStatus.Granted)
{
if (await CrossPermissions.Current.ShouldShowRequestPermissionRationaleAsync(Permission.Storage))
{
//await DisplayAlert("Need location", "Gunna need that location", "OK");
Console.WriteLine("OK");
}
var results = await CrossPermissions.Current.RequestPermissionsAsync(Permission.Storage);
//Best practice to always check that the key exists
if (results.ContainsKey(Permission.Storage))
status = results[Permission.Storage];
}
if (status == PermissionStatus.Granted)
{
string root = Android.OS.Environment.ExternalStorageDirectory.AbsolutePath;
Java.IO.File myDir = new Java.IO.File(root + "/Screenshots");
myDir.Mkdirs();
string fname = "test_picture.jpg";
Java.IO.File file = new Java.IO.File(myDir, fname);
Console.WriteLine("------root-------" + file.Path);
FileStream outStream = new FileStream(file.Path, FileMode.OpenOrCreate);
....
}
else if (status != PermissionStatus.Unknown)
{
Console.WriteLine("OK");
//await DisplayAlert("Location Denied", "Can not continue, try again.", "OK");
}
}
catch (Exception ex)
{
Console.WriteLine("" + ex);
}
其他解决方案:
如果不使用
,你可以试试
Private external files
/存储/模拟/0/Android/data/com.companyname.app/files/
这不需要运行时权限。但是
AndroidManifest.xml文件
也需要。
string root = Application.Context.GetExternalFilesDir("DirectoryPictures").ToString();