鄙人C#菜鸟 想用下面程序实现 查找指定文件(代码中暂定为“xi.txt”) 然后放到一个文件夹中,(控件没加太多只为实现这一目的)为方便 大家快速浏览 我已作出相关注释。。小弟初来此论坛发帖..求助求助!
private void button1_Click(object sender, EventArgs e)
        {
            string[] divers = Directory.GetLogicalDrives();//获取盘符目录
            for (int i = 0; i < divers.Length; i++)
            {
                xilei(divers[i]);//调用方法
            }
        }
        private void xilei(string xl)//定义方法
        {
            string[] tianxue = Directory.GetDirectories(xl);
            for (int i = 0; i < tianxue.Length; i++)
            {
                label1.Text = tianxue[i];//显示查找过程
                string x = Path.GetFileName(tianxue[i]);
                if (x == "xi.txt")//指定查找文件
                {
                    File.Copy(tianxue[i], @"E:\xilei\");
                    MessageBox.Show("已找到该文件,复制但E:\\xilei目录下", "提示");
                }               
                xilei(tianxue[i]);//递归调用
            }      
       
        }
    }
问题是 在win7 下运行提示 一些目录访问受限 出错无法运行 ,当我指定D盘一个固定文件夹 查找时,程序执行了但却没有复制到我指定的目录下(该目录下我已防了指定文件“xi.txt”)..求高手!

解决方案 »

  1.   

    点断点,或加日志,看看是那段出错了
    我怀疑是你 Directory.GetLogicalDrives();//获取盘符目录的时候就出错了
    也许有些目录你没有权限遍历你点断点 看看错误出现在第几行代码,再做分析
      

  2.   

    加上try catch,程序错了还是继续循环找下去,还有很多解决方法,原理就是避开不能访问的文件和文件夹try
    {  label1.Text = tianxue[i];//显示查找过程
      string x = Path.GetFileName(tianxue[i]);
      if (x == "xi.txt")//指定查找文件
      {
      File.Copy(tianxue[i], @"E:\xilei\");
      MessageBox.Show("已找到该文件,复制但E:\\xilei目录下", "提示");
    }
    catch(Exception ex)
    {}
      

  3.   

    五楼说的有道理 但我想要程序没找到文件..出错后什么 也不说 就直接跑到 catch 后了我就不知道该怎么办了...
      

  4.   

    加try catch 后再点断点
    你可以看看 C#书里关闭调试这部分内容F9 在光标行设置断点
    F10  单步调试,一行一行 调试
    F5 跳到下一处断点位置
    F11 进入方法里面进行调试
      

  5.   

    将你程序生成的exe右键以管理员身份打开试一试。
      

  6.   

    怎么只见楼主遍历到目录这一层,没有遍历目录下文件呢。没遍历文件肯定不能if (x == "xi.txt")判断成功啊
      

  7.   

    你用了递归调用,catch之后不好搞,而且也尽量不要这样搞,容易无限循环看代码应该都是这句错了调用之前先判断是否有COPY的权限,或者改用另外的方法File.Copy(tianxue[i], @"E:\xilei\");慢慢搞吧,程序员就是调试员
      

  8.   

    string[] divers = Directory.GetLogicalDrives();
    string[] tianxue = Directory.GetDirectories(xl);把string[] 改成DirectoryInfo[]
    而且你的递归函数不能只有一个string参数表示路径,还要有个DirectoryInfo参数表示要搜索的文件夹
      

  9.   

    为什么是xilei(divers[i]);而不是xilei(divers);