static List<Model> list = new List<Model>();
        static int num = 0;        private void Form1_Load(object sender, EventArgs e)
        {
            string diskpath = System.Windows.Forms.Application.StartupPath.Split('\\')[0] + "\\";
            ForEachDisk(diskpath);
            MessageBox.Show(num.ToString());
        }        private void ForEachDisk(string path)
        {
            DirectoryInfo dir = new DirectoryInfo(path);            try
            {
                foreach (DirectoryInfo d in dir.GetDirectories())
                {
                    ForEachDisk(d.FullName);
                }
            }
            catch (UnauthorizedAccessException ex)
            {
 
            }            foreach (FileInfo f in dir.GetFiles())
            {
                Model m = new Model();
                m.name = f.Name;
                m.path = f.FullName;
                list.Add(m);
                listBox2.Items.Add(f.Name);
                num++;
            }
        }    }    public class Model
    {
        private string _name;
        //private string _type;
        private string _path;        public string name { get { return _name; } set { _name = value; } }
        //public string type { get { return _type; } set { _type = value; } }
        public string path { get { return _path; } set { _path = value; } }
    }
用这个递归算法遍历出来的文件数量与windows统计的文件数量不一样,差10000多个文件?请问算法有什么问题?算法磁盘递归

解决方案 »

  1.   

    你抓异常但不处理是很不好的习惯,也许有些文件权限不够不能访问,就会跑出UnauthorizedAccessException异常,但你并未处理,这样计入的文件就少了,
      

  2.   

    有系统文件没权限,你定义一个静态变量做计数器,然后在catch里递增计数器,最后输出看看是多少
      

  3.   

    你的程序中,异常是.net api抛出的,不是你自己抛出的,至于处理自然是需要的,处理的方法有:
    1.用throw把异常再抛出,让上层程序再抓一次,
    2.写错误信息到日志文件中,这样出了你顶楼中的问题,你可以查看日志文件知道怎么回事,就不需要上csdn问了,
    3.用messagebox显示一条错误信息,功能同2,让你知道是怎么回事,
    4.return false,或者null之类的,告诉调用者,出错了,让调用者处理,这某种情况下比throw要方便,
      

  4.   


    避免异常,不应该吃掉,不Catch就是了。否则以后出了bug,都不知道怎么回事,就像你现在遇到的问题,少了文件,都不知道怎么回事。