Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File net中的递归文件搜索_File_Io_.net_File Search - Fatal编程技术网

File net中的递归文件搜索

File net中的递归文件搜索,file,io,.net,file-search,File,Io,.net,File Search,我需要在驱动器(C:、D:等)中搜索部分文件类型(扩展名为.xml、.csv、.xls)。如何执行递归搜索以循环所有目录和内部目录,并返回文件所在的完整路径?或者我从哪里可以得到这方面的信息 VB.NET或C# 谢谢 编辑~我遇到一些错误,如无法访问系统卷访问被拒绝等。有人知道我在哪里可以看到一些实施文件搜索的示例代码吗?我只需要搜索一个选定的驱动器,并返回找到的所有文件的文件类型的完整路径。这个怎么样?它避免了内置递归搜索经常引发的异常(即,您对单个文件夹的访问被拒绝,而整个搜索将终止),并被

我需要在驱动器(C:、D:等)中搜索部分文件类型(扩展名为.xml、.csv、.xls)。如何执行递归搜索以循环所有目录和内部目录,并返回文件所在的完整路径?或者我从哪里可以得到这方面的信息

VB.NET或C#

谢谢


编辑~我遇到一些错误,如无法访问系统卷访问被拒绝等。有人知道我在哪里可以看到一些实施文件搜索的示例代码吗?我只需要搜索一个选定的驱动器,并返回找到的所有文件的文件类型的完整路径。

这个怎么样?它避免了内置递归搜索经常引发的异常(即,您对单个文件夹的访问被拒绝,而整个搜索将终止),并被延迟评估(即,它在找到结果后立即返回结果,而不是缓冲2000个结果)。惰性行为可以让您构建响应性强的UI等,也可以很好地与LINQ配合使用(尤其是
First()
Take()
,等等)

System.IO.Directory.GetFiles(@"c:\", "*.xml", SearchOption.AllDirectories);
使用系统;
使用系统集合;
使用System.Collections.Generic;
使用System.IO;
静态类程序{//格式为垂直空间
静态void Main(){
foreach(搜索中的字符串匹配(“c:\\”,“*.xml”)){
控制台写入线(匹配);
}
}
静态IEnumerable搜索(字符串根、字符串搜索模式){
Queue dirs=新队列();
目录排队(根);
而(dirs.Count>0){
string dir=dirs.Dequeue();
//档案
字符串[]路径=null;
试一试{
路径=Directory.GetFiles(dir,searchPattern);
}抓{}//吞
if(paths!=null&&paths.Length>0){
foreach(路径中的字符串文件){
生成返回文件;
}
}
//子目录
路径=空;
试一试{
路径=Directory.GetDirectories(dir);
}抓{}//吞
if(paths!=null&&paths.Length>0){
foreach(路径中的字符串子目录){
目录排队(子目录);
}
}
}
}
}
看起来这个库(代表递归ls)现在有了一个。我只是

将用作:

using Recls;
using System;
static class Program { // formatted for vertical space
    static void Main() {
        foreach(IEntry e in FileSearcher.Search(@"c:\", "*.xml|*.csv|*.xls")) {
            Console.WriteLine(e.Path);
        }
    }

隐马尔可夫模型。。。刚刚得到了一张蓝色的否决票——请解释为什么?也许是因为使用了“catch{}”。我无意冒犯你,但那是很糟糕的做法。最好捕获AccessDeniedException或DirectoryNotFoundException,或其他。。。汉克斯马克。太棒了。
using Recls;
using System;
static class Program { // formatted for vertical space
    static void Main() {
        foreach(IEntry e in FileSearcher.Search(@"c:\", "*.xml|*.csv|*.xls")) {
            Console.WriteLine(e.Path);
        }
    }