string str = "c:\\";
            int i = 0;
            foreach (string s in Directory.GetFiles(str, "*", SearchOption.AllDirectories))
            {
                i += 1;
                
            }像以上代码。一运行就会报错,说是某某目录拒绝访问。所以我想问问有没有什么方法可以忽略这个异常让程序继续运行,跳到下一个目录呢?

解决方案 »

  1.   

    try catch 请参考->错误处理机制
      

  2.   

    public int ddddd(string path)
            {
                int i = 0;
                string[] strFile = Directory.GetFiles(path);
                i = strFile.Length;
                string[] strDirectory = Directory.GetDirectories(path);
                foreach (string item in strDirectory)
                {
                    try
                    {
                        i += ddddd(item);
                    }
                    catch (Exception)
                    {
                        continue;
                    }
                }
                return i;
            }
      

  3.   

    直接try...catch....    try{
        }
        catch{}    这样就O了
      

  4.   

    LZ这段代码是无法通过忽略异常而达到你希望的目的。因为MSDN上有写“when you use GetFiles, you must wait for the whole array of names to be returned before you can access the array.”,就是说GetFiles会把所有的文件名一次全取出来,若是有异常,则这个方法运行失败。你可以试着把这个方法从循环内移出来,比如:
    string[] files = Directory.GetFiles(@"C:\", "*", SearchOption.AllDirectories);
    再执行,你会发现程序在这里就出错了,与下面的循环没有关系。
      

  5.   

    已经将rinall 贴出的代码进行了改编成功的搜索出了全部文件名。谢谢rinall