I have a control which shows a list of all PDFs in a selected folder. The names of most of these PDFs (for example, meeting minutes) begin with a date. I want these PDFs shown in descending order so that the most recent PDFs are shown at the top.
In the same folder I also have some PDFs whose names do not contain a date (for example, policies). I want these files to be ordered alphabetically.
Here is an example of the kind of list I have and how I want it to be ordered:
这是我尝试过的:
private void GenerateFolder()
{
folder_path = Server.MapPath(BaseFolder);
_folder_view = new StringBuilder();
if (Directory.Exists(folder_path))
{
DirectoryInfo info = new DirectoryInfo(folder_path);
FileInfo[] files = info.GetFiles().OrderByDescending(p => p.FullName).ToArray();
foreach (FileInfo file in files)
{
doStuff();
}
}
folder_view.Text = _folder_view.ToString();
}
Run Code Online (Sandbox Code Playgroud)
使用此代码,名称以日期开头的PDF按我想要的降序排列(按日期)。但是其他名称不是以日期开头的PDF 却没有按照我想要的方式(按字母顺序)排序。有没有办法实现我的双重分类目标?
我将创建一个自定义类,将日期和文件名的其余部分解析为单独的属性,然后您可以使用OrderByDescending和ThenBy对这些单独的属性进行排序。
public class ParsedFilename
{
public ParsedFilename(string filename)
{
FullName = filename;
if (filename.Length >= 12 &&
DateTime.TryParse(filename.Substring(0, 10), out var date))
{
Date = date;
Name = filename.Substring(11);
}
else
{
Date = null;
Name = filename;
}
}
public DateTime? Date { get; }
public string Name { get; }
public string FullName { get; }
}
Run Code Online (Sandbox Code Playgroud)
你可以这样使用它:
var data = new List<string>(new[]
{
"2019-01-12 Meeting minutes.pdf",
"Safeguarding policy.pdf",
"2017-04-27 Meeting minutes.pdf",
"2018-06-02 Meeting minutes.pdf",
"2017-12-13 Meeting agenda.pdf",
"Privacy policy.pdf",
"Welfare policy.pdf",
"2018-11-19 Meeting agenda.pdf"
});
var parsedData = data.Select(d => new ParsedFilename(d));
var sortedData = parsedData.OrderByDescending(d => d.Date)
.ThenBy(d => d.Name);
var output = sortedData.Select(d => d.FullName);
Run Code Online (Sandbox Code Playgroud)
它产生以下输出:
2019-01-12 会议纪要.pdf
2018-11-19 会议议程.pdf
2018-06-02 会议纪要.pdf
2017-12-13 会议议程.pdf
2017-04-27 会议纪要.pdf
隐私政策
.pdf政策.pdf
福利政策.pdf
根据目录中文件名的格式,您可能需要添加一些更强大的解析。
| 归档时间: |
|
| 查看次数: |
70 次 |
| 最近记录: |