Hallo,
ich habe einen Ordner mit Dateien dieser Art:
_
kaution.csv
_2009-07-22-07-58-26_kaution_2009_07_22_05_00_20.csv
_2009-07-22-07-58-26_kaution_2009_07_21_05_00_20.csv
_2009-07-20-07-58-26_kaution_2009_07_20_05_00_20.csv
2009-07-21-07-58-26_kaution_2009_06_12_05_00_20.csv
kaution_2009_04_21_05_00_20.csv
kaution_2007_01_21_05_00_20.csv
kaution_2009_07_22_05_00_20.csv
kaution_2009_07_20_05_00_20.csv
Hier möchte ich nun die zuletzt benannte Datei anhand des Namens finden und zwar entsprechend dem timestamp for der Endung, also z.B. _2009_07_22_05_00_20. In diesem Fall muss also die Datei _2009-07-22-07-58-26_kaution_2009_07_22_05_00_20.csv dabei raus kommen, da diese die neuste nach kaution.csv ist. Die Datei selber kann unterschiedlich heißen, also auch xyz.txt. Wie könnte man das wohl am elegentesten lösen? Vielleicht mit einem schönen Regex?
Danke 😃
ja, mit regex.
tipp:
[Artikel] Regex-Tutorial
Hallo math55,
und zum Testen der schönen Regex empfiehlt sich herbivores On-the-fly Regex-Tester: Regex-Lab.
m0rius
Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg
Hallo math55,
entweder Regex mit und durchlaufen der Rückgabe von zb Directory.GetFiles(string)
oder falls Dir der jeweilige Timestamp bekannt ist, kannst Du auch eine überladung der GetFiles Methode versuchen
Directory.GetFiles-Methode (System.IO)
mfg
Hallo math55,
List<string> files = new List<string>()
{
"kaution.csv",
"_2009-07-22-07-58-26_kaution_2009_07_22_05_00_20.csv",
"_2009-07-22-07-58-26_kaution_2009_07_21_05_00_20.csv",
"_2009-07-20-07-58-26_kaution_2009_07_20_05_00_20.csv",
"_2009-07-21-07-58-26_kaution_2009_06_12_05_00_20.csv",
"kaution_2009_04_21_05_00_20.csv",
"kaution_2007_01_21_05_00_20.csv",
"kaution_2009_07_22_05_00_20.csv",
"kaution_2009_07_20_05_00_20.csv"
};
Func<string,DateTime?> getDateTime = delegate(string fileName)
{
Regex regex = new Regex(@"(\d{4}).(\d{2}).(\d{2}).(\d{2}).(\d{2}).(\d{2})\.csv$");
Match match = regex.Match(fileName);
if (!match.Success)
return null;
else
{
int year = Convert.ToInt32(match.Groups[1].Value);
int month = Convert.ToInt32(match.Groups[2].Value);
int day = Convert.ToInt32(match.Groups[3].Value);
int hour = Convert.ToInt32(match.Groups[4].Value);
int minute = Convert.ToInt32(match.Groups[5].Value);
int second = Convert.ToInt32(match.Groups[6].Value);
return new DateTime(year,month,day,hour,minute,second);
}
};
string latestFileName = files.OrderByDescending(file => getDateTime(file)).FirstOrDefault();
Gruß,
dN!3L