为什么返回的listArr是空?递归调用 文件查找 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 搜寻当前目录及子目录所有文件的文件名??如果是的话List<string> listArr = new List<string>();的声明要在递归外面并且当参数传递进来还有listArr命名明显不规范,当然与此问题无关 是递归的原因。“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; }我没有测试,你试一下。 兄弟,这个是递归,你要理解吗,这从何讲起,我感觉只能靠自己多调试两下来领悟,我感觉代码有问题,比如 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; } } } 正确的,明白了 List<string> listArr = new List<string>();实例化list位置错了。每次都重新实例,所以导致返回值为空。谢谢! c# 修改WINCE 系统时间 C#多线程委托一个方法,很奇怪的问题 asp.net 自定义类类型详细解一下,可以吗 请问在Windows应用程序中如何去访问已知站点? 这个快捷键怎么弄的?~ c#winform 怎么设置SESSION 如何把Console.read得到的数字转化为double处理呢?默认的是int 20分正则表达式工具,要带教程的 C# 如何使用PNG图片实现三态按钮 请问一个方法如何返回多个返回值?如果对一个数组进行多下标赋值? 关于代码重复 这类警告啥意思,求详解
List<string> listArr = new List<string>();
的声明要在递归外面并且当参数传递进来还有listArr命名明显不规范,当然与此问题无关
“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;
}我没有测试,你试一下。
我感觉代码有问题,比如
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;
}
}
}