0

我正在使用它来选择一个根文件夹并从每个目录中获取最新文件,然后再将此文件添加到我的文件listbox中,但在某些情况下它不会选择最新文件。

var rootDirFile = Directory
    .EnumerateFiles(pathToSearch, "*.doc", SearchOption.TopDirectoryOnly)
    .OrderByDescending(f => File.GetLastWriteTime(f))
    .Take(1);

var allNewestFilesOfEachFolder = Directory
    .EnumerateDirectories(pathToSearch, "*.*", SearchOption.AllDirectories)
    .Select(d => Directory.EnumerateFiles(d, "*.doc")
        .OrderByDescending(f => File.GetLastWriteTime(f))
        .FirstOrDefault());

foreach (string tempFile in rootDirFile.Concat(allNewestFilesOfEachFolder))
{
    //add the file
}
4

3 回答 3

1

File.GetLastWriteTime 看起来并不总是在 WindowsVista/7 上可靠(请参阅我在这篇文章中的回答)。

要创建更可靠的解决方案,您可以考虑使用FileSystemWatcher,但在这种情况下,您需要使用某种正在运行的服务。

或者可以考虑使用 if File.GetCreationTime,如果每次都实际创建“新”文件。

于 2013-01-29T10:59:42.360 回答
0

这应该为您提供目录/最新文件对的列表:

var latestByDirectory = new DirectoryInfo(_strPath)
    .GetDirectories()
    .Select(d => new
    {
         Directory = d,
        LatestFile = d.GetFiles()
            .OrderByDescending(f => f.CreationTime)
            .DefaultIfEmpty((FileInfo)null)
            .ToList().First()
    });
于 2013-01-29T11:22:57.757 回答
0

我们已经使用了一段时间,似乎没有任何问题。

我们不能使用File.GetCreationTime,因为无论创建时间如何,都会在文件中进行编辑。

while (Directory.GetFiles(dir, "*", SearchOption.TopDirectoryOnly).Count() > 7)
  {
     DirectoryInfo dirInfo = new DirectoryInfo(dir);
     FileSystemInfo fileInfo = dirInfo.GetFileSystemInfos().OrderBy(fileT => fileT.LastWriteTime).First();
     File.Delete(fileInfo.FullName);
  }
于 2013-01-29T11:02:19.810 回答