您需要解析的文件名:
DirectoryInfo info = new DirectoryInfo(path);
FileInfo[] files = info.GetFiles(filter)
.OrderBy(p => Path.GetFileNameWithoutExtension(p.FullName).Split('_')[1])
.ToArray();
但这很容易出错。
使用LINQ
就像我说的,这是很容易出错,我可能会写这样的事:
DirectoryInfo info = new DirectoryInfo(path);
FileInfo[] files = (from fileInfo in info.GetFiles(filter)
let splitted = Path.GetFileNameWithoutExtension(fileInfo.FullName).Split('_')
where splitted.Length > 1
orderby splitted[1]
select fileInfo).ToArray();
一种更好的方式将被解析日期时间和排序。
这也将筛选文件名中没有有效日期的文件。
private DateTime? ParseFilename(FileInfo fileInfo)
{
var parts = Path.GetFileNameWithoutExtension(fileInfo.FullName).Split('_');
if (parts.Length < 1)
return null;
DateTime result;
if (!DateTime.TryParse(parts[1], out result))
return null;
return result;
}
用法:
DirectoryInfo info = new DirectoryInfo(path);
FileInfo[] files = (from fileInfo in info.GetFiles(filter)
let DateTime = ParseFilename(fileInfo)
where DateTime.HasValue
orderby DateTime.Value
select fileInfo).ToArray();
不适代码:无法转换的FileInfo为String –
在:'路径.GetFileNameWithoutExtension(p)' –
@KobyDouek已更新 –