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