我编写了一个方法,该方法需要查找路径中的所有文件,并且我希望使用递归获取所有文件。下面是我当前的方法:
public void doStart(DirectoryInfo dir, string filePattern)
{
try
{
foreach (FileInfo fileInfo in dir.GetFiles(filePattern))
{
if (fileFound != null)
{
fileFound(fileInfo);
}
}
}
catch (Exception)
{
}
try
{
foreach (DirectoryInfo dirInfo in dir.GetDirectories())
{
doStart(dirInfo, filePattern);
}
}
catch (Exception)
{
}
}
public void Start(string path, string filePattern)
{
doStart(new DirectoryInfo(path), filePattern);
}有没有更好的方法来编写这种递归,或者这足够好了吗?
发布于 2012-12-19 04:36:50
尝试如下所示:
string[] filePaths = Directory.GetFiles(@dir, "*.filetype", SearchOption.AllDirectories);这将递归地查找目录,查找具有特定文件类型('.filetype')的所有文件,并返回包含所有找到的文件的字符串数组。
另外,我建议不要使用空的catch块,因为您的应用程序不会让您知道是否出现了错误。要么显示一个消息框(或类似的内容),要么将其记录到数据库或其他什么地方。
此外,如果子目录中有一个子目录,DoStart()方法会做什么?据我所见,它只在一个子层上搜索。
发布于 2012-12-19 04:37:27
DoStart和`FileFound'OnFileFound方法,而不是直接调用FileFound (我假设fileFound是一个事件处理程序?)除此之外,它对我来说看起来很好。
发布于 2012-12-19 04:49:16
这是一个真正的递归的例子。这将进行搜索,直到不再有子目录可供查找,这与Directory.GetFiles SearchOption.AllDirectories不同。您可以对此进行修改,以将搜索筛选器作为参数添加。
public IEnumerable<string> GetFilesRecursive(string ParentDirectory)
{
string[] subDirectories = Directory.GetDirectories(ParentDirectory);
foreach (string file in Directory.GetFiles(ParentDirectory))
{
yield return file;
}
foreach (string subDirectory in subDirectories)
{
foreach (string file in GetFilesRecursive(subDirectory))
{
yield return file;
}
}
}https://stackoverflow.com/questions/13940980
复制相似问题