【发布时间】:2013-04-18 17:54:23
【问题描述】:
如何检索文件夹的任何个后代的最新写入时间?
我需要一个方法来返回在指定日期时间之后修改的所有文件的路径。我想我可以通过确保目录LastWriteTime 在指定范围内,然后再遍历其文件和子目录的麻烦来节省大量昂贵的磁盘读取。
这是因为当目录顶层中的文件发生更改时,该文件夹的最后写入时间也会更新。但是,最后一次写入时间不会比文件的直接父级更远。换句话说,如果孙文件被更改,它的属性会被更新,它的父文件夹也是如此,但不是祖父文件夹。
我是否可以使用另一个高级指标来完成此操作,或者我是否必须求助于递归遍历每个文件夹而不考虑上次更改时间?
这是目前的方法:
private void AddAllFilesOfAllSubdirsWithFilterToList(string dirPath, ref List<FileInfo> filesList, DateTime minDate)
{
// Return files in this directory level
foreach (string filePath in Directory.GetFiles(dirPath, "*.*", SearchOption.TopDirectoryOnly))
{
FileInfo fileInfo = new FileInfo(filePath);
if (fileInfo.LastWriteTimeUtc > minDate)
{
filesList.Add(fileInfo);
}
}
// Return recursive searches through sudirs
foreach (string subDirPath in Directory.GetDirectories(dirPath))
{
DirectoryInfo dirInfo = new DirectoryInfo(subDirPath);
if (dirInfo.LastWriteTimeUtc > minDate)
{
GetAllFilesOfAllSubdirsWithFilter(subDirPath, ref filesList);
}
}
}
【问题讨论】:
-
您声称更改文件会更新目录的 LastWriteTime,但我刚刚在 Windows 10 和 MacOS 11 上对此进行了测试,但没有看到。我更改了一个文件,但目录的最后写入时间保持不变。