在整个设备中搜索特定的文件类型会给出UnauthorizedAccessException

时间:2018-07-29 18:41:06

标签: c# xamarin.forms

我是Xamarin.Forms的新手,我想搜索孔设备以查找具有特定扩展名的所有文件(例如mp3),因此,在我的.net Standard PCL项目中,我创建了这样的帮助程序类:

    private readonly List<string> _audioFilesList = new List<string>();
    private readonly string[] _fileTypesArr = {"mp3"/*, "wav", "flac", "m4a", "wma", "oog", "aac"*/};

    public List<string> SearchEntireDevice()
    {
        foreach (var dInfo in DriveInfo.GetDrives().Where(x => x.IsReady))
            ApplyAllFiles(dInfo.RootDirectory.FullName, ProcessFile, _fileTypesArr);
        return _audioFilesList;
    }

    private void ProcessFile(string path)
    {
        _audioFilesList.Add(path);
    }

    public void ApplyAllFiles(string folder, Action<string> fileAction, params string[] fileTypes)
    {
        foreach (var fileType in fileTypes)
        foreach (var file in Directory.GetFiles(folder, "*" + fileType))
            fileAction(file);
        foreach (var subDir in Directory.GetDirectories(folder))
            try
            {
                if ((File.GetAttributes(folder) & FileAttributes.ReparsePoint) != FileAttributes.ReparsePoint)
                    ApplyAllFiles(subDir, ProcessFile, _fileTypesArr);
            }
            catch (UnauthorizedAccessException)
            {
            }
            catch (Exception e)
            {
                // ignored
            }
    }

当我在Android设备上运行程序并对其进行调试时,我发现DriveInfo.GetDrives()可以正常工作并且可以对ApplyAllFiles方法进行处理,有时会抛出UnauthorizedAccessException,但是代码将其捕获了阻止并且我的应用程序不会中断,但是,当涉及到以下路径时:'/ mnt / runtime / default / emulated',我的应用程序会显示以下消息:

  

System.UnauthorizedAccessException:拒绝访问路径“ / mnt / runtime / default / emulated”。

当我在catch块中捕获此异常时,如何发生? 另一个问题是,在Xamarin.Forms中是否有更好的方法来完成我想要的工作?

注意:我检查了android项目清单中的READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE权限。

0 个答案:

没有答案