[英]Files in directory sort by fileName ascending
I am having a list of files from a directory and I want to sort it out by filename. 我有一个目录中的文件列表,我想按文件名排序。
This is the main code: 这是主要代码:
var localPath = this.Server.MapPath("~/Content/Img/" + type + "/");
var directory = new DirectoryInfo(localPath);
isDirectory = directory.Exists;
if (isDirectory)
{
foreach (FileInfo f in directory.GetFiles())
{
Picture picture = new Picture();
picture.ImagePath = path;
picture.CreationDate = f.CreationTime;
picture.FileName = f.Name;
listPictures.Add(picture);
}
}
here is the class Picture where all the files are stored: 这是存储所有文件的类图片:
public class Picture
{
public string ImagePath { get; set; }
public string FileName { get; set; }
public DateTime CreationDate { get; set; }
}
How do you do to sort a files list by order of FileName? 如何按FileName的顺序对文件列表进行排序?
Simply change your for loop : 只需更改你的for循环:
foreach (FileInfo f in directory.GetFiles().OrderBy(fi=>fi.FileName))
{
}
Alternatively, you can rewrite the whole loop using this code : 或者,您可以使用以下代码重写整个循环:
var sortedFiles = from fi in directory.GetFiles()
order by fi.FileName
select new Picture { ImagePath = path, CreationDate = f.CreationTime, FileName = f.FileName };
listPictures.AddRange(sortedFiles);
listPictures = listPictures.OrderBy(x => x.FileName).ToList();
You can use lambda expression and/or extension methods. 您可以使用lambda表达式和/或扩展方法。 For example:
例如:
listPictures.OrderBy(p => p.FileName).ToList();
请注意, EnumerateFiles执行延迟加载,对于较大的目录可以更有效,因此:
dir.EnumerateFiles().OrderBy(f => f.FileName))
You can use LINQ from the beginning: 您可以从一开始就使用LINQ:
var files = from f in directory.EnumerateFiles()
let pic = new Picture(){
ImagePath = path;
CreationDate = f.CreationTime;
FileName = f.Name;
}
orderby pic.FileName
select pic;
Note that Directory.EnumerateFiles(path)
will be more efficient if only the FileName
is used. 请注意,如果仅使用
FileName
,则Directory.EnumerateFiles(path)
将更有效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.