c#中的递归搜索方法

时间:2010-01-25 09:44:07

标签: c#

我决定不再将应用程序中的报告保留为嵌入式资源,并将它们本地移动到服务器。优点是显而易见的,但考虑到我想以清晰的方式组织目录(常见报告,信头等)。我需要一种只通过名称加载报告的方法,调用递归搜索方法。我的计划是使用可以在应用程序启动时构建的缓存,然后在列表中搜索或使用每次需要时查找报告名称的方法...任何想法和最终使用代码(c#)的示例都非常欢迎!

文件夹结构可以是:

\\ webserver \ Reports(报告具有唯一名称的文件)

\\ webserver \ Reports \ Common(具有唯一名称的报告文件)

\\ webserver \ Reports \ Manager1(报告具有唯一名称的文件)

\\ webserver \ Reports \ Manager1 \ Invoices(报告具有唯一名称的文件)

\\ webserver \ Reports \ ManagerN(报告具有唯一名称的文件)

希望这个例子有用!谢谢!

3 个答案:

答案 0 :(得分:5)

如果要递归搜索目录以获取特定扩展名:

var d = new DirectoryInfo("\\\\webserver\\Reports");
var files =  d.GetFiles(".rpt", SearchOption.AllDirectories);

答案 1 :(得分:1)

如何而不是每次搜索,您在应用程序的配置文件的一部分中记录报告的确切位置?也许这就是构建缓存的意思。

答案 2 :(得分:1)

请参阅Microsoft How to recursively search directories by using Visual C#

撰写的这篇文章

它解释了如何编写递归函数(在c#中非常简单)

如果您的目录树不是太大(少于100个目录并且少于每个目录中的50个文件),那么就不需要缓存(在我看来)。如果你构建一个缓存,你必须要处理它(即处理必须更新的情况等)

void DirSearch(string sDir) {
try 
{
   foreach (string d in Directory.GetDirectories(sDir)) 
   {
    foreach (string f in Directory.GetFiles(d, txtFile.Text)) 
    {
       lstFilesFound.Items.Add(f);
    }
    DirSearch(d); /// Recursive Call !!
   }
}
catch (System.Exception excpt) 
{
    Console.WriteLine(excpt.Message);
}}