如何从没有权限的位置添加文件时处理UnauthorizedAccessException以这种方式从文件夹中提取文件:尝试{string[]files=Directory.GetFiles(folderBrowserDialog1.SelectedPath,"*.*",SearchOption.AllDirectories);}catch(UnauthorizedAccessException){抛出;如果我的根文件夹包含用户UnauthorizedAccessException访问的文件夹,则捕获UnauthorizedAccessException并且我的数组为空并且所有递归失败。我如何处理这种情况并确保我的代码在未经许可的情况下忽略该位置,但从经许可的位置添加文件?请参阅另一篇文章中的SafeFileEnumerator。我过去成功地使用了SafeFileEnumerator代码。当您只是无权访问单个文件时,它可以防止丢失整个枚举,因此您仍然可以遍历您有权访问的文件。编辑:我的版本与我链接的版本略有不同,所以让我分享一下我的。publicstaticclassSafeFileEnumerator{publicstaticIEnumerableEnumerateDirectories(stringparentDirectory,stringsearchPattern,SearchOptionsearchOpt){try{vardirectories=Enumerable.Empty();如果(searchOpt==SearchOption.AllDirectories){directories=Directory.EnumerateDirectories(parentDirectory).SelectMany(x=>EnumerateDirectories(x,searchPattern,searchOpt));}returndirectories.Concat(Directory.EnumerateDirectories(parentDirectory,searchPattern));}catch(UnauthorizedAccessExceptionex){returnEnumerable.Empty();}}publicstaticIEnumerableEnumerateFiles(stringpath,stringsearchPattern,SearchOptionsearchOpt){try{vardirFiles=Enumerable.Empty();如果(searchOpt==SearchOption.AllDirectories){dirFiles=Directory.EnumerateDirectories(路径).SelectMany(x=>EnumerateFiles(x,searchPattern,searchOpt));}返回dirFiles.Concat(Directory.EnumerateFiles(path,searchPattern));}赶上(未经授权的访问异常ionex){returnEnumerable.Empty();}}}使用方法示例:foreach(stringfileNameinSafeFileEnumerator.EnumerateFiles(folderPath,"*"+extension,SearchOption.AllDirectories)){//用文件名做一些事情,存储到数组或任何你想做的事情。您可以使用FileSystemInfo查看并发送完成此任务:staticListfiles=newList();staticvoidMyMethod(){DirectoryInfodir=newDirectoryInfo(folderBrowserDialog1.SelectedPath);ProcessFolder(dir.GetFileSystemInfos());}staticvoidProcessFolder(IEnumerablefsi){foreach(FileSystemInfoinfoinfsi){//我们跳过重分析点if((info.Attributes&FileAttributes.ReparsePoint)==FileAttributes.ReparsePoint){Debug.WriteLine("跳过重分析点'{0}'",info.FullName);返回;}if((info.Attributes&FileAttributes.Directory)==FileAttributes.Directory){//如果我们的FileSystemInfo对象是目录,我们将在//新目录上再次调用此方法。试试{DirectoryInfodirInfo=(目录信息)信息;ProcessFolder(dirInfo.GetFileSystemInfos());}catch(Exceptionex){//跳过任何错误//真的,我们应该捕获每种类型的异常-//这将捕获发生的任何异常,//这可能不是我们想要的行为。Debug.WriteLine("{0}",ex.Message);休息;}}else{//如果我们的FileSystemInfo对象不是目录,我们将其转换为FileInfo对象,//确保它不为空,并将其添加到列表中。var文件=信息作为文件信息;if(file!=null){files.Add(file.FullName);}}}}MyMethod获取您选择的路径并使用它创建一个DirectoryInfo对象,然后调用GetFileSystemInfos()方法并将其传递给ProcessFolder方法ProcessFolder方法查看每个FileSystemInfo对象,跳过重新分析点,并调用如果FileSystemInfo对象是目录,则再次调用ProcessFolder方法-否则,它将FileSystemInfo对象转换为FileInfo对象,确保它不为空,然后将文件名添加到列表中。更多阅读:以上是C#学习教程:HowtodealwithUnauthorizedAccessExceptionwhentryingtoaddfilesfromalocationwithoutpermission。如果对大家有用,需要进一步了解C#学习教程,希望大家多加关注——本文来自网络收藏不代表立场,如涉及侵权,请点右转联系管理员删除。如需转载请注明出处:
