目录问题中的C#列表文件

时间:2009-09-07 10:37:37

标签: c# .net visual-studio-2008

我使用的是VSTS 2008 + C#+ .Net 3.0。我希望按创建时间枚举目录中的所有文件,即最近创建的文件最初会被激活,最后会枚举较旧的文件。任何想法如何实现这个?

5 个答案:

答案 0 :(得分:6)

像这样的东西


System.IO.FileInfo[] array = new System.IO.DirectoryInfo("directory_path").GetFiles();
Array.Sort(array, delegate(System.IO.FileInfo f1, System.IO.FileInfo f2)
            {
                return f2.CreationTimeUtc.CompareTo(f1.CreationTimeUtc);
            });

答案 1 :(得分:4)

我可能会使用LINQ和列表...这样的事情应该有效:

 DirectoryInfo di = new DirectoryInfo("YourPath");
 List<FileInfo> files = di.GetFiles().OrderBy(f => f.CreationTime).ToList();

 foreach (FileInfo file in files)
        {
            //do something
        }

答案 2 :(得分:2)

尝试这样的事情:

DirectoryInfo di = new DirectoryInfo("path to folder");
FileInfo[] files = di.GetFiles();
IOrderedEnumerable<FileInfo> enumerable = files.OrderBy(f => f.CreationTime);

foreach (FileInfo info in enumerable)
{
  // do stuff...        
}

答案 3 :(得分:2)

编辑:已更新,此处为非LINQ解决方案

FileInfo[] files = new DirectoryInfo("directory").GetFiles();
Array.Sort(files, delegate(FileInfo f1, FileInfo f2) {
    return f2.CreationTime.CompareTo(f1.CreationTime);
});

以上将按最新到最早排序。要按最旧到最新排序,请将代理更改为:return f1.CreationTime.CompareTo(f2.CreationTime);

<小时/> LINQ解决方案:

FileInfo[] files = new DirectoryInfo("directory").GetFiles();
var results = files.OrderByDescending(file => file.CreationTime);

使用OrderByDescending按最近的CreationTime排序,否则使用OrderBy从最旧的CreationTime排序到最新的CreationTime。

答案 4 :(得分:-1)

DirectoryInfo baseFolder=new DirectoryInfo("folderName");
FileInfo[] files=baseFolder.GetFiles("");
for(int i=1; i<=files.Length;i++)
for(int j=1; j<files.Length;j++)
{
    if(files[j].CreationTime > files[j+1].CreationTime)
    {
        FileInfo f = files[j];
        files[j] = files[j+1];
        files[j+1] = f;
    }
}