写了一个搜索文件名的小程序,递归的时候出错

.Net技术 码拜 8年前 (2016-03-08) 860次浏览
public void Search(DirectoryInfo dir)
        {
            DirectoryInfo[] direct=dir.GetDirectories();
            FileInfo[] files=dir.GetFiles();
            foreach(FileInfo item in files)
            {
                if(TargetFileName==item.Name)//这里的TargetFileName是要搜索的文件名
                {
                    Console.WriteLine(item.DirectoryName+item.Name);
                }
            }
            foreach(DirectoryInfo item in direct)
            {
                Search(item);//假如注释掉这句,程序正常,在当前目录下的文件可以被搜索到
            }
           
        }

为了清楚点,本人只贴这个方法,程序其它地方没有问题。
报错:例如说假如本人搜索的是E盘
未经处理的异常:  System.UnauthorizedAccessException: 对路径“E:\$RECYCLE.BIN\S-1-5-18”的访问被拒绝。
在 System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
在 System.IO.FileSystemEnumerableIterator`1.CommonInit()
在 System.IO.FileSystemEnumerableIterator`1..ctor(String path, String originalUserPath, String searchPattern, SearchOption searchOption, SearchResultHandler`1 resultHandler, Boolean checkHost)
在 System.IO.DirectoryInfo.InternalGetDirectories(String searchPattern, SearchOption searchOption)
在 System.IO.DirectoryInfo.GetDirectories()
在 FileSearch.SearchFile.Search(DirectoryInfo dir)
在 FileSearch.SearchFile.Search(DirectoryInfo dir)
在 FileSearch.SearchFile.Search(DirectoryInfo dir)
在 FileSearch.SearchFile..ctor(String onedrive, String targetFile)
在 FileSearch.Program.Main(String[] args)
输入对D盘的搜索也是一样,是权限问题,还是程序问题?该怎么样解决?
还有这个程序,本人是单独建的一个CS文件,没有建项目,在控制台下手动编译执行的,这会不会有影响?

解决方案

20

可以看出Attributes包含System则为系统文件夹,不应递归检索它

public void Search(DirectoryInfo dir)
        {
            DirectoryInfo[] direct=dir.GetDirectories();
            FileInfo[] files=dir.GetFiles();
            foreach(FileInfo item in files)
            {
                if(TargetFileName==item.Name)//这里的TargetFileName是要搜索的文件名
                {
                    Console.WriteLine(item.DirectoryName+item.Name);
                }
            }
            foreach(DirectoryInfo item in direct)
            {
                if (item.Attributes.ToString().Contains("System"))
                    break;
                Search(item);//假如注释掉这句,程序正常,在当前目录下的文件可以被搜索到
            }
            
 
        }

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明写了一个搜索文件名的小程序,递归的时候出错
喜欢 (0)
[1034331897@qq.com]
分享 (0)