Sie müssen den Dateinamen analysieren:
DirectoryInfo info = new DirectoryInfo(path);
FileInfo[] files = info.GetFiles(filter)
.OrderBy(p => Path.GetFileNameWithoutExtension(p.FullName).Split('_')[1])
.ToArray();
Aber das ist fehleranfällig.
Mit Linq
Wie ich schon sagte, ist dieser Fehler anfällig, würde ich wahrscheinlich so etwas schreiben:
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();
Eine bessere Möglichkeit, die Parsen würde datetime und sortiere darauf.
Dies wird auch auf die Dateien filtern, die kein gültiges Datum innerhalb des Dateinamens hat.
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;
}
Verbrauch:
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();
Nicht gültiger Code sehr unklar ist: Kann nicht Fileinfo zu String –
konvertieren: 'Pfad .GetFileNameWithoutExtension (p) ' –
@KobyDouek aktualisiert –