当前位置:  开发笔记 > 编程语言 > 正文

.net中的递归文件搜索

如何解决《.net中的递归文件搜索》经验,为你挑选了3个好方法。

我需要在驱动器(C:,D:etc)中搜索特定文件类型(扩展名为.xml,.csv,.xls).如何预先形成递归搜索以循环所有目录和内部目录并返回文件所在的完整路径?或者我在哪里可以获得相关信息?

VB.NET或C#

谢谢

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



1> Cristian Lib..:
System.IO.Directory.GetFiles(@"c:\", "*.xml", SearchOption.AllDirectories);



2> Marc Gravell..:

这个怎么样?它避免了内置递归搜索经常抛出的异常(即你对单个文件夹的访问被拒绝,你的整个搜索都会死掉),并且被懒惰地评估(即它在找到结果后立即返回结果,而不是缓冲2000结果).懒惰的行为,可以建立响应用户界面等,也与LINQ(尤其是效果很好First(),Take()等).

using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
static class Program { // formatted for vertical space
    static void Main() {
        foreach (string match in Search("c:\\", "*.xml")) {
            Console.WriteLine(match);
        }
    }
    static IEnumerable Search(string root, string searchPattern) {
        Queue dirs = new Queue();
        dirs.Enqueue(root);
        while (dirs.Count > 0) {
            string dir = dirs.Dequeue();

            // files
            string[] paths = null;
            try {
                paths = Directory.GetFiles(dir, searchPattern);
            } catch { } // swallow

            if (paths != null && paths.Length > 0) {
                foreach (string file in paths) {
                    yield return file;
                }
            }

            // sub-directories
            paths = null;
            try {
                paths = Directory.GetDirectories(dir);
            } catch { } // swallow

            if (paths != null && paths.Length > 0) {
                foreach (string subDir in paths) {
                    dirs.Enqueue(subDir);
                }
            }
        }
    }
}



3> DannyT..:

它看起来像recls库 - 代表rec ursive ls - 现在有一个纯.NET实现.我只是在Dobb博士看到它.

将用作:

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);
        }
    }

推荐阅读
围脖上的博博_771
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有