2012-07-09 68 views
7

有没有一种方法可以使用Array从目录中存储5个最后修改文件的文件位置?C#:从目录中获取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多个文件发送到一个电子邮件地址作为附件。

UPDATE我目前使用下面的代码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

+1

你只是需要“.ToArray()”在文件定义的末尾?即'var files = directory.GetFiles()。Where(file => file.LastWriteTime> = from_date && file.LastWriteTime <= to_date).ToArray();' – Michael 2012-07-09 01:35:20

+1

@Michael我不断收到错误“Can not implicitly convert type'字符串'到'System.IO.FileInfo'“ – abramlimpin 2012-07-09 01:47:41

+1

你必须从一个路径创建一个'FileInfo'对象。使用适当的构造函数'new FileInfo(path)' – 2012-07-09 01:50:10

回答

19
来的文件名列表

以下是LINQ的一般做法:

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

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

+0

谢谢!这解决了我的问题! – abramlimpin 2012-07-09 01:57:05

+0

如何以同样的方式获得最新修改的目录? – VarunJi 2014-04-08 08:01:33

+2

虽然这个答案的作品,我认为在http://stackoverflow.com/questions/1179970/c-sharp-find-most-recent-file-in-dir的答案可能会更好。 – newman 2014-05-21 04:07:02

1

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

鉴于你已经有了FileInfo枚举,你可以这样做:

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

如果你想只是文件名,以更换NameFullName

相关问题