解决方案 »

  1.   

    搜寻当前目录及子目录所有文件的文件名??如果是的话
    List<string> listArr = new List<string>();
    的声明要在递归外面并且当参数传递进来还有listArr命名明显不规范,当然与此问题无关 
      

  2.   

    是递归的原因。
    “str_path”这个参数代表的文件夹里是不是没有文件? 方法中每次都new 一个listArr,怎么能保存文件名字呢?起码要把它传到方法的调用中啊,试试这个:
     public static List<string> GetFolderPath(string str_path,List<string> fileNames)
            {
                DirectoryInfo mydir = new DirectoryInfo(str_path);
                //List<string> listArr = new List<string>(); //注释掉,作为参数传进来。
                foreach (FileSystemInfo fsi in mydir.GetFileSystemInfos())
                {
                    if (fsi is FileInfo)//如果是文件
                    {
                        string x = fsi.FullName;
                        listArr.Add(x);
                    }
                    if (fsi is DirectoryInfo)//如果是文件夹
                    {
                        GetFolderPath(fsi.FullName,fileNames);//递归调用,将子文件夹的文件名加到fileNames列表中
                    }
                }
                return listArr;
            }我没有测试,你试一下。
      

  3.   

    兄弟,这个是递归,你要理解吗,这从何讲起,我感觉只能靠自己多调试两下来领悟,
    我感觉代码有问题,比如
     GetFolderPath(fsi.FullName);
    要返回个List代表其下的子层目录,但是程序里面并没有用,函数执行完直接给丢弃了,这样的递归是错误的,
    用下面的吧    public class DiskDirectory
        {
            DirectoryInfo dirinfo;        // Constructor requires DirectoryInfo object.
            public DiskDirectory(DirectoryInfo dirinfo)
            {
                this.dirinfo = dirinfo;
            }        // Name property returns directory name.
            public string Name
            {
                get { return dirinfo.Name; }
            }        // Subdirectories property returns collection of DiskDirectory objects.
            public List<DiskDirectory> Subdirectories
            {
                get
                {
                    List<DiskDirectory> dirs = new List<DiskDirectory>();
                    DirectoryInfo[] subdirs;                try
                    {
                        subdirs = dirinfo.GetDirectories();
                    }
                    catch
                    {
                        return dirs;
                    }                foreach (DirectoryInfo subdir in subdirs)
                        dirs.Add(new DiskDirectory(subdir));                return dirs;
                }
            }
        }
      

  4.   

    正确的,明白了 List<string> listArr = new List<string>();实例化list位置错了。每次都重新实例,所以导致返回值为空。谢谢!