程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了拒绝访问路径 Xamarin 表单大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决拒绝访问路径 Xamarin 表单?

开发过程中遇到拒绝访问路径 Xamarin 表单的问题如何解决?下面主要结合日常开发的经验,给出你关于拒绝访问路径 Xamarin 表单的解决方法建议,希望对你解决拒绝访问路径 Xamarin 表单有所启发或帮助;

我正在尝试将我的 db 文件复制到内部存储根目录/文档。我的代码在 AndroID 9 之前运行良好,但在它之后我收到错误“System.UnauthorizedAccessException:访问路径”/storage/emulated/0/documents/FruitsApp/BACkup/Fruits.db_2021-06-28 12 :20:20" 被拒绝" 我尝试了很多方法来复制所有在 AndroID 9 之前都可以工作的方法,但在它之后我遇到了上述错误。我正在分享我的所有代码。提前致谢。

----复制代码

 Java.IO.file mediaStorageDir = new Java.IO.file(AndroID.os.Environment.GetExternalStoragePublicDirectory(AndroID.os.Environment.Directorydocuments) + path);            
            
            if (!mediaStorageDir.Exists())
            {
                var tt = mediaStorageDir.Mkdirs();

                if (mediaStorageDir.Mkdirs() == falsE)
                {

                    var fail = "Failed to create";

                }
            }

       
            var directoryPath = mediaStorageDir.absolutePath;


          ////////--this way to create folder is working till andorID 9
           
           //var PathExists = Directory.Exists(directoryPath);

            //if (PathExists ==falsE)
            //{
            //    Directory.CreateDirectory(directoryPath);
            //}


            var dbPath = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal),"Fruits.db");


            fileInfo file = new fileInfo(dbPath);

            var dbname = file.name;

            var fullfilename = String.Concat("/",dbname + "_",Global.CurrentdatetiR_191_11845@e());

            var newpath = String.Format("{0}{1}",directoryPath,fullfileName);
              
              //////--- First way copy file from source to desTination is working tille androID 9
              
            //using (fileStream sourceStream = System.IO.file.open(dbPath,fileMode.open,fileAccess.Read,fileShare.ReaDWritE))
            //using (fileStream desTinationStream = System.IO.file.Create(newpath))
            //{
            //     sourceStream.copyToAsync(desTinationStream);
            //}

         //////--- 2nd way copy file from source to desTination is working tille androID 9
            
            byte[] dbfile = System.IO.file.ReadAllBytes(dbPath);
            System.IO.file.WriteallBytes(newpath,dbfilE);

            
            //////--- 3rd way copy file from source to desTination is working tille androID 9
            //file.copyTo(newpath);
      

我尝试了 3 种方法将文件从源复制到另一个所有方法都可以工作到 androID 9,但在 androID 9 之后不起作用。

--AndroID 清单文件

 <?xml version="1.0" enCoding="utf-8"?>
 <manifest xmlns:androID="http://scheR_191_11845@as.androID.com/apk/res/androID" androID:versionCode="1" 
 androID:versionname="1.0" package="com.NewWave.FruitApp" androID:installLOCATIOn="auto">
 <uses-sdk androID:minSdkVersion="23" androID:targetSdkVersion="30" />
 <application androID:requestLegacyExternalStorage="true" androID:label="FruitApp" 
 androID:theme="@style/Maintheme"></application>
 <uses-permission androID:name="androID.permission.ACCESS_NETWORK_STATE" />
 <uses-permission androID:name="androID.permission.Call_PHONE" />
 <uses-permission androID:name="androID.permission.SEND_SMS" />
 <uses-permission androID:name="androID.permission.WRITE_EXTERNAL_STORAGE" />
 <uses-permission androID:name="androID.permission.READ_EXTERNAL_STORAGE" 
 androID:maxsdkVersion="29" />
  <uses-permission androID:name="androID.permission.ACCESS_MEDIA_LOCATION" />
  <!--<uses-permission androID:name="androID.permission.READ_EXTERNAL_STORAGE" />-->
  </manifest>

解决方法

我有一个 SQLite 数据库保存在我手机的内部存储器中,在一个名为 sqlite 的文件夹中创建的文件夹中。我在权限和路径方面遇到了麻烦。我是这样解决的:

private readonly sqliteAsyncConnection _conn;  

public LocalContext()
{
    // Create directory for sqlite
    Directory.CreateDirectory(Path.Combine("/storage/emulated/0/","sqlite"));

    String dbPath = Path.Combine(
    "/storage/emulated/0/sqlite","ventaMovil.db");
    _conn = new sqliteAsyncConnection(dbPath);
}

在调用我的 LocalContext 之前,我会检查您是否具有写入权限:

private async Task<bool> checkPermissions()
    {
        var status = await _permissionservice.checkAndrequestPermissionAsync(new Permissions.StorageWrite());
        if (status != PermissionStatus.Granted)
        {
            await App.Current.MainPage.DisplayAlert("Error","You do not have wriTing permissions","Okay");
            return false;
        }
        return true;
    }

对于我使用 Xamarin Essentials 的权限:

public class Permissionservice : IPermissionservice
    {
        public async Task<PermissionStatus> checkAndrequestPermissionAsync<T>(T permission) where T : Permissions.basePermission
        {
            var status = await permission.checkStatusAsync();
            if (status != PermissionStatus.Granted)
            {
                status = await permission.requestAsync();
            }

            return status;
        }
    }

在 Android Manifest 中,我有这两个:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

大佬总结

以上是大佬教程为你收集整理的拒绝访问路径 Xamarin 表单全部内容,希望文章能够帮你解决拒绝访问路径 Xamarin 表单所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。