从每个目录中选择最新的文件

时间:2013-01-29 10:56:02

标签: c#

我使用它来选择一个根文件夹并从每个目录中获取最新文件,然后将这些文件添加到我的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
}

3 个答案:

答案 0 :(得分:1)

可能看起来像

File.GetLastWriteTime Is not always reliable on WindowsVista/7(请参阅我在这篇文章中的回答)。

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

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

答案 1 :(得分: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);
  }

答案 2 :(得分:0)

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

var latestByDirectory = new DirectoryInfo(_strPath)
    .GetDirectories()
    .Select(d => new
    {
         Directory = d,
        LatestFile = d.GetFiles()
            .OrderByDescending(f => f.CreationTime)
            .DefaultIfEmpty((FileInfo)null)
            .ToList().First()
    });