有没有一种方法可以按SMB共享上的创建时间枚举文件?

时间:2020-07-28 19:41:42

标签: c# windows winapi smb

我正在寻找一种检索SMB远程共享上比特定日期/时间新的文件的方法,这些文件均在Windows下运行。我一直在使用DirectoryInfo.EnumerateFiles(),并在返回时进行过滤。不幸的是,这意味着每一个文件记录都是在我查看之前通过网络发送的,并且随着文件列表的增加,这种情况变得越来越糟。

我一直在与第三方供应商合作,因此无法选择删除旧文件,并且无法在我正在读取的文件服务器上运行任何代码。

通过p /调用FindFirstFileEx / FindNextFile并使用FindExInfoBasicFIND_FIRST_EX_LARGE_FETCH标志,我已经获得了一些暂时的改进,但是理想情况下,我希望想要将datetime过滤器卸载到服务器,并仅通过网络发送我需要的文件记录。有一些我找不到的API可以帮上忙吗?

2 个答案:

答案 0 :(得分:0)

SMB协议本身允许创建SMB2 QUERY_DIRECTORY Request,并用SMB2 QUERY_DIRECTORY Response进行回答。根据SMB协议规范,您应该能够获得目录文件的列表,其中仅包含所需的最少信息集(“ FileInformationClass”)并大块传输它们。

要了解如何实现它,我将看一下SharpCifs.Std的源代码。

答案 1 :(得分:-1)

您尝试过吗?

DirectoryInfo DirInfo = new DirectoryInfo(@"\\archives1\library\");

DateTime StartOf2009 = new DateTime(2009, 01, 01);

// LINQ query for all files created before 2009.
var files = from f in DirInfo.EnumerateFiles()
       where f.CreationTimeUtc < StartOf2009
       select f;

// Show results.
foreach (var f in files)
{
  Console.WriteLine("{0}", f.Name);
}