Laden...

Datei anhand des Namens filtern?

Erstellt von math55 vor 14 Jahren Letzter Beitrag vor 14 Jahren 1.078 Views
math55 Themenstarter:in
314 Beiträge seit 2007
vor 14 Jahren
Datei anhand des Namens filtern?

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 😃

Gelöschter Account
vor 14 Jahren

ja, mit regex.

tipp:
[Artikel] Regex-Tutorial

1.002 Beiträge seit 2007
vor 14 Jahren

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

2.223 Beiträge seit 2005
vor 14 Jahren

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

2.891 Beiträge seit 2004
vor 14 Jahren

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