C# 获取路径中的所有文件(递归)
我编写了一个方法,需要查找路径中的所有文件,我希望使用递归获取所有文件。以下是我目前的方法:C# 获取路径中的所有文件(递归),c#,C#,我编写了一个方法,需要查找路径中的所有文件,我希望使用递归获取所有文件。以下是我目前的方法: public void doStart(DirectoryInfo dir, string filePattern) { try { foreach (FileInfo fileInfo in dir.GetFiles(filePattern)) {
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);
}
有没有更好的方法来编写这种递归,或者这已经足够好了?试试这样的方法:
string[] filePaths = Directory.GetFiles(@dir, "*.filetype", SearchOption.AllDirectories);
这将递归地查找目录,查找具有特定文件类型('.filetype')的所有文件,并返回包含所有找到的文件的字符串数组
另外,我建议不要使用空的catch块,因为如果出现问题,应用程序不会让您知道。要么显示一个消息框(或类似的东西),要么将其记录到数据库或其他地方
此外,如果子目录中有子目录,DoStart()方法会做什么?据我所见,我认为它只搜索1个子级别
DoStart
和'FileFound'OnFileFound
方法,而不是直接调用FileFound
(我假设FileFound
是一个事件处理程序?)除此之外,我觉得它还不错。这里是一个真正递归的示例。与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;
}
}
}
公共IEnumerable GetFilesRecursive(字符串ParentDirectory)
{
string[]subDirectories=Directory.GetDirectories(ParentDirectory);
foreach(Directory.GetFiles(ParentDirectory)中的字符串文件)
{
生成返回文件;
}
foreach(子目录中的字符串子目录)
{
foreach(GetFilesRecursive(子目录)中的字符串文件)
{
生成返回文件;
}
}
}
代码搜索此代码中的所有子目录:
foreach(DirectoryInfo dirInfo in dir.GetDirectories()){doStart(dirInfo,filePattern);}
@NikolaDavidovic根据MSDN,它不(),它只获取当前目录的子目录。这就像一个符咒,而且速度非常快。只要不将@Dir设置为“c:\\”但除此之外,这是一个很好的代码StefanM@DJKRAZE在使用文件路径时,我倾向于使用“@”,因为我总是忘记转义“\”。我不确定其中哪一个会更快,但我不认为这些选项之间的速度有很大差异(如果有的话)。你的答案很准确..我只是在测试它并尝试了“c:\”例如,它抛出了一个异常,我无法访问某些文件夹。。