我有一个包含许多文件的文件夹。有没有简单的方法来获取目录中的文件名按创建日期/时间排序?
如果我使用Directory.GetFiles()
,它将返回按文件名排序的文件。
答案 0 :(得分:167)
这对你有用。
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...
}
答案 1 :(得分:41)
您可以使用Linq
var files = Directory.GetFiles(@"C:\", "*").OrderByDescending(d => new FileInfo(d).CreationTime);
答案 2 :(得分: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);
});
答案 3 :(得分:4)
这将返回上次修改日期及其年龄。
DateTime.Now.Subtract(System.IO.File.GetLastWriteTime(FilePathwithName).Date)
答案 4 :(得分: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
答案 5 :(得分: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());
答案 6 :(得分:0)
如果性能存在问题,则可以在MS_DOS中使用以下命令:
dir /OD >d:\dir.txt
此命令在** d:**根目录中生成一个 dir.txt 文件,其中所有文件均按日期排序。 然后从您的代码中读取文件。 另外,您还可以通过*和?添加其他过滤器。