在.NET中按创建日期获取文件


92

我有一个包含许多文件的文件夹。是否有任何简单的方法来获取目录中按其创建日期/时间排序的文件名?

如果使用Directory.GetFiles(),它将返回按文件名排序的文件。



4
的GetFiles()确实没有排序,让他们下令名字是一个意外。整理一下自己。
汉斯·帕桑

Answers:


198

这可能为您工作。

using System.Linq;

DirectoryInfo info = new DirectoryInfo("PATH_TO_DIRECTORY_HERE");
FileInfo[] files = info.GetFiles().OrderBy(p => p.CreationTime).ToArray();
foreach (FileInfo file in files)
{
    // DO Something...
}

“System.IO.FileInfo []”不包含关于“排序依据”的定义
Umair贾巴尔

2
Ivo

12
我认为没有必要调用ToArray()方法。
伊沃

AnyIdeas无需使用扩展方法/ LINQ,因为我的目标是.NET 2.0
Pratik

10
如果有可能在不同时区(包括夏时制)中创建目录中的文件,请考虑使用info.GetFiles()。OrderBy(p => p.CreationTimeUtc)而不是CreationTime
Steve

46

您可以使用Linq

var files = Directory.GetFiles(@"C:\", "*").OrderByDescending(d => new FileInfo(d).CreationTime);

2
DirectoryInfo解决方案要快得多(尤其是对于网络路径而言)
jing 2013年

8

如果您不想使用LINQ

// Get the files
DirectoryInfo info = new DirectoryInfo("path/to/files"));
FileInfo[] files = info.GetFiles();

// Sort by creation-time descending 
Array.Sort(files, delegate(FileInfo f1, FileInfo f2)
{
    return f2.CreationTime.CompareTo(f1.CreationTime);
});

4

这将返回上次修改的日期及其年龄。

DateTime.Now.Subtract(System.IO.File.GetLastWriteTime(FilePathwithName).Date)

1

@jing:“ DirectoryInfo解决方案比这要快得多(尤其是对于网络路径)”

我无法确认。似乎Directory.GetFiles触发了文件系统或网络缓存。第一个请求需要一段时间,但是即使添加了新文件,随后的请求也会更快。在我的测试中,我以相同的模式制作了一个Directory.getfiles和一个info.GetFiles,并且都运行相同

GetFiles  done 437834 in00:00:20.4812480
process files  done 437834 in00:00:00.9300573
GetFiles by Dirinfo(2)  done 437834 in00:00:20.7412646

1

如果性能存在问题,则可以在MS_DOS中使用以下命令:

dir /OD >d:\dir.txt

此命令在** d:**根目录中生成dir.txt文件,所有文件均按日期排序。然后从您的代码中读取文件。此外,还可以通过*和?添加其他过滤器。


0
            DirectoryInfo dirinfo = new DirectoryInfo(strMainPath);
            String[] exts = new string[] { "*.jpeg", "*.jpg", "*.gif", "*.tiff", "*.bmp","*.png", "*.JPEG", "*.JPG", "*.GIF", "*.TIFF", "*.BMP","*.PNG" };
            ArrayList files = new ArrayList();
            foreach (string ext in exts)
                files.AddRange(dirinfo.GetFiles(ext).OrderBy(x => x.CreationTime).ToArray());
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.