您需要解析的文件名:
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已更新 –