如何在多个UNC路径中搜索部分文件

时间:2015-10-08 23:06:11

标签: c#

我知道这很多;试图从工作中挖出一个洞。

基本上,我需要抓住多个服务器上的多个文件。现在我遇到了两个问题: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();
        }

2 个答案:

答案 0 :(得分:1)

您提到您只需查找过去3天内制作的文件。不应使用DateTime.Today.AddDays( -3 )并对日期进行硬编码,而应使用DateTime time = DateTime.Today.AddDays( -3 ); if ( File.GetCreationTime( filePath ) > time ) { // Add the file } 在计划运行之日的前三天获取日期。

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

"THING WAS SET TO 0 THIS SHOULD ONLY HAPPEN AT FIRST"

答案 1 :(得分:0)

1)您想要创建一个在单个文件夹中查找filespec的基本功能。您已经在上面的代码中编写了这个,您只需将其转换为具有参数UNC path和filespec的函数。让函数采用List< FileInfo>的第三个参数。将找到的文件添加到。

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

3)获取要搜索到列表或数组的根UNC路径,然后调用它们,将它们传递给它们,将文件规范和最初空列表传递给#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。我编辑了代码。