C#:从目录中获取5个最新(最后修改过的)文件

时间:2012-07-09 01:26:40

标签: c# linq file directory

有没有办法可以使用Array从目录中存储5个最后修改过的文件的文件位置?

我目前正在使用以下代码获取最后一个文件:

DateTime lastHigh = new DateTime(1900,1,1);
string highDir;
foreach (string subdir in Directory.GetDirectories(path)){
    DirectoryInfo fi1 = new DirectoryInfo(subdir);
    DateTime created = fi1.LastWriteTime;

    if (created > lastHigh){
        highDir = subdir;
        lastHigh = created;
    }
}

我将使用Array将多个文件作为附件发送到电子邮件地址。

更新

我目前正在使用以下代码在1分钟后获取最后修改的文件:

string myDirectory = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyPictures),
                  "Test Folder");
var directory = new DirectoryInfo(myDirectory);
DateTime from_date = DateTime.Now.AddMinutes(-1);
DateTime to_date = DateTime.Now;
var files = directory.GetFiles().Where(file => file.LastWriteTime >= from_date && file.LastWriteTime <= to_date);

我想存储来自files

的文件名列表

3 个答案:

答案 0 :(得分:21)

以下是使用LINQ执行此操作的一般方法:

 Directory.GetFiles(path)
             .Select(x => new FileInfo(x))
             .OrderByDescending(x => x.LastWriteTime)
             .Take(5)
             .ToArray()

我怀疑这不是你想要的,因为你的代码示例似乎在不同的任务中工作,但在一般的情况下,这将做你的问题标题所要求的。

答案 1 :(得分:1)

听起来你想要一个目录中所有文件的完整文件路径的string数组。

鉴于您已经拥有FileInfo可枚举,您可以这样做:

var filenames = files.Select(f => f.FullName).ToArray();

如果您只想要文件名,请将FullName替换为Name

答案 2 :(得分:0)

Paul Phillips提供的答案有效。值得牢记的是 FileInfo.LastWriteTimeFileInfo.LastAccessTime并不总是有效。这取决于操作系统的配置方式或可能是缓存问题。

.NET FileInfo.LastWriteTime & FileInfo.LastAccessTime are wrong

File.GetLastWriteTime seems to be returning 'out of date' value