Directory.GetFiles按日期排序

时间:2012-03-28 11:16:20

标签: sorting date

我使用Directory.GetFiles从特定文件夹中获取文件。 默认情况下,该文件夹中的文件将按文件名排序。按字母顺序排列。我想按文件修改顺序获取文件。

我无法使用Directory.GetInfo,因为我想获取包含特定关键字的文件。 请让我知道如何根据修改日期对文件进行排序。 我使用以下代码

string[] arr1 = Directory.GetFiles("D:/TestFolder", "*"Test12"*");

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:11)

下面的内容

DirectoryInfo di = new DirectoryInfo("D:\\TestFolder");
FileSystemInfo[] files = di.GetFileSystemInfos();
var orderedFiles = files.Where(f=>f.Name.StartsWith("Test12"))
                        .OrderBy(f => f.CreationTime)
                        .ToList();

您可以根据需要使用任何字符串函数替换f.Name.StartWith.Contains等)

您可以将f => f.CreationTime替换为f.LastWriteTime以获取修改时间,但请记住,从Windows Vista开始,默认情况下上次访问时间不会更新。这是为了提高文件系统性能

答案 1 :(得分:6)

如果您更改为目录信息,则可以执行

FileInfo[] files = new DirectoryInfo("path")
                        .GetFiles("filter")
                        .OrderBy(f => f.CreationTime)
                        .ToArray();

修改
看到你想要修改日期,可以用f.LastWriteTime代替

答案 2 :(得分:0)

试试这个方法。它会起作用...

            string path = "C:\\Users", FileName="YourFileName";
            DirectoryInfo direct= new DirectoryInfo(path);
            FileInfo[] files = direct.GetFiles();
            Array.Sort(files , (x, y) => StringComparer.OrdinalIgnoreCase.Compare(x.CreationTime, y.CreationTime));
            files = Array.FindAll(files , a => a.FullName.Contains(FileName) == true);
            foreach(var file in files){
                // do what you want.. 
                Console.WriteLine(file.FullName);
            }