我正在寻找一种检索SMB远程共享上比特定日期/时间新的文件的方法,这些文件均在Windows下运行。我一直在使用DirectoryInfo.EnumerateFiles()
,并在返回时进行过滤。不幸的是,这意味着每一个文件记录都是在我查看之前通过网络发送的,并且随着文件列表的增加,这种情况变得越来越糟。
我一直在与第三方供应商合作,因此无法选择删除旧文件,并且无法在我正在读取的文件服务器上运行任何代码。
通过p /调用FindFirstFileEx
/ FindNextFile
并使用FindExInfoBasic
和FIND_FIRST_EX_LARGE_FETCH
标志,我已经获得了一些暂时的改进,但是理想情况下,我希望想要将datetime过滤器卸载到服务器,并仅通过网络发送我需要的文件记录。有一些我找不到的API可以帮上忙吗?
答案 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);
}