我是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权限。