【问题标题】:How to search through multiple UNC paths for a partial file如何在多个 UNC 路径中搜索部分文件
【发布时间】:2015-10-08 23:06:11
【问题描述】:

这很多,我知道;试图把自己从工作的坑里挖出来。

基本上,我需要掌握跨多个服务器的许多文件。现在我遇到了两个问题,1)我想不出搜索多个 UNC 路径的最佳方法。 2)我必须按部分名称搜索,可能有多个文件匹配,但我只想使用过去三天创建的文件。

到目前为止,这是我的代码。我不是在找人来写它,但我会很感激任何后勤方面的指针。

        uncPath1 = "\\server\share\";
        string partial = "2002265467";
        DateTime date = Convert.ToDateTime("10/5/2015");

        DirectoryInfo a = new DirectoryInfo(uncPath1);
        FileInfo[] interactionlist = a.GetFiles("*" + partial + "*.*", SearchOption.AllDirectories);

        foreach (FileInfo f in interactionlist)
        {
            string fullname = f.FullName;

            Console.WriteLine(fullname);
            Console.Read();
        }

【问题讨论】:

    标签: c#


    【解决方案1】:

    您提到您只需要查找过去 3 天内制作的文件。您应该使用DateTime.Today.AddDays( -3 ) 来获取程序运行前三天的日期,而不是使用Convert.ToDateTime 和硬编码日期。

    当然,在您的查找文件方法中,将日期与以下内容进行比较:

    DateTime time = DateTime.Today.AddDays( -3 );
    if ( File.GetCreationTime( filePath ) > time ) {
        // Add the file
    }
    

    【讨论】:

      【解决方案2】:

      1) 您想要创建一个在单个文件夹中查找文件规范的基本函数。您已经在上面的代码中编写了该代码,只需将其转换为带有参数 UNC 路径和文件规范的函数。让函数采用 List 的第三个参数来添加找到的文件。

      2) 如果您需要搜索子文件夹,请创建一个函数来搜索 UNC 路径的子文件夹,方法是调用您在 #1 中编写的函数,然后获取所有文件夹的列表,并为找到的每个文件夹调用自身(在反过来,这些调用将调用子文件夹等)这称为递归。让此函数获取一个列表并将所有找到的文件添加到列表中,方法是将其传递给您的 #1 函数。

      3) 将要搜索的根 UNC 路径获取到列表或数组中,然后在它们上调用 foreach,将它们、文件规范和最初为空的列表传递给 #2 函数。

      所以:

      bool FindFiles(string uncPath, string fileSpec, List<FileInfo> found);
      bool FildFilesSubfolders(string uncPath, string fileSpec, List<FileInfo> found);
      
      string fileSpec = "whatever";
      string[] uncPaths = { "abc", "def" };  // etc
      List<FileInfo> found = new List<FileInfo>();
      foreach (string nextPath in uncPaths)
      {
          if (FindFilesSubfolders(nextPath, fileSpec, found))
              break;
      }
      
      foreach (FileInfo f in found)
      {
          string fullname = f.FullName;
          Console.WriteLine(fullname);
          Console.Read();
      }
      

      最后一个想法:如果您正在搜索子目录并且您担心两个本质上重复的 UNC 路径(例如,c:\foo 和 c:\foo\foo2),您可以使用 This method 来检查路径在另一条路径中。

      编辑:如果你找到了你正在寻找的东西并想提前退出,让函数返回一个布尔值,表示你找到了你想提前停止的东西。然后在你的循环中使用 break 。我已经编辑了代码。

      【讨论】:

      • 嗨,Ed,非常感谢您的帮助,很抱歉昨晚没有回复,为了理智,我下线了。我确实尝试过投票,但它说我不能在获得 15 名声望之前。我已经实施了您的建议,并且..它奏效了!太感谢了。我想知道你是否可以再帮忙一次?如果找到文件,“退出”通过 uncPaths 搜索的最佳方法是什么?我有四个,搜索所有这些很耗时。
      • @jPol34,使用 find 函数中的返回码,并在真正返回时(或在原始函数中,当找到任何内容时)中断循环。我在上面做了修改。
      猜你喜欢
      • 1970-01-01
      • 2011-01-20
      • 2017-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-28
      • 1970-01-01
      相关资源
      最近更新 更多