有没有办法通过 SMB 共享上的创建时间来枚举文件?

Ecl*_*pse 7 c# windows smb winapi

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

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

我已经能够通过 p/invoking FindFirstFileEx/FindNextFile和使用FindExInfoBasicandFIND_FIRST_EX_LARGE_FETCH标志获得一些临时改进,但理想情况下,我想将日期时间过滤器卸载到服务器,并且只通过网络发送我需要的文件记录。是否有一些我找不到的 API 可以提供帮助?

use*_*420 -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);
}
Run Code Online (Sandbox Code Playgroud)

  • 不会改变您仍在枚举文件的事实,而这正是 Eclipse 试图避免的。 (2认同)