Laden...

Neueste Datei aus einem Verzeichnis holen?

Erstellt von math55 vor 17 Jahren Letzter Beitrag vor 17 Jahren 8.996 Views
math55 Themenstarter:in
314 Beiträge seit 2007
vor 17 Jahren
Neueste Datei aus einem Verzeichnis holen?

hallo, gibts da eine effiziente möglichkeit, welche schon eingebaut ist? oder müsste man das selber machen?

danke

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo math55,

je nachdem, was du genau willst, könnte FileSystemWatcher für dich interessant sein. Ansonsten gibt es m.E. nichts fertiges.

herbivore

math55 Themenstarter:in
314 Beiträge seit 2007
vor 17 Jahren

ich habe ein verzeichnis mit configdateien. da möchte ich die zuletzt angelegte finden und verarbeiten. geht das mit FileSystemWatcher ?

grüße

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo math55

nein.

DirectoryInfo.GetFiles und dann selber gucken, welches die jüngste ist.

herbivore

J
3.331 Beiträge seit 2006
vor 17 Jahren

So habe ich es gemacht (aus einem aktuellen Projekt kopiert):

string[] textfileList = Directory.GetFiles(textfilePath, textfileFilter);
if (textfileList.Length > 0) {
	DateTime dt = new DateTime(2001,1,1);
	DateTime fileLastChange;
	string fileLastChanged = "";
	foreach(string textfile in textfileList) {
		fileLastChange = File.GetLastWriteTime(textfile);
		if (fileLastChange > dt) {
			dt = fileLastChange;
			fileLastChanged = textfile;
		}
	}
	if (fileLastChanged != "") {
		LoadText(fileLastChanged);
	}
}

Gruß Jürgen

B
1.529 Beiträge seit 2006
vor 17 Jahren

Wieso so kompliziert?
Mittels DirectoryInfo.GetFiles bekommst du direkt ein FileInfo[]. Dort brauchst du dann bloß noch die Zeit abfragen. Das ganze über Strings laufen zu lassen ist sehr kompliziert.
Desweiteren solltest du statt new DateTime(2001,1,1) einfach DateTime.MinValue benutzen.

Allse in allem also so:

public string GetNewestFilesName( string DirectoryName, string FileMask )
{
   DateTime newestDate = DateTime.MinValue;
   int newestIndex = 0;
   FileInfo[] Files = (new DirectoryInfo( DirectoryName )).GetFiles( FileMask );
   for ( int i = 0; i < Files.Length; i+ )
   {
      if (newestDate < Files[i].LastWriteTime)
      {
         newestDate = Files[i].LastWriteTime;
         newestIndex = i;
      }
   }
   return (Files.Length > 0) ? Files[newestIndex].FullName : null;
}
175 Beiträge seit 2006
vor 17 Jahren

In diesem Zusammenhang hab ich mich grad gefragt, obs aus Performance-Sicht nicht sinnvoller wäre, das Array entsprechend dem Datum zu sortieren... was meint ihr? So wäre ja im schlechtesten Fall O(n), je nach Sortier-Algorithmus wäre dies ja durchaus zu unterbieten.

Nimmt mich nur grad wunder, weil wir gerade darauf in der Schule rumritten... 😁

J
3.331 Beiträge seit 2006
vor 17 Jahren

Hallo Borg,

ich hatte mit Directory.GetFiles() gearbeitet, weil mich sowieso der Dateiname interessiert hatte. Aber Du hast recht: DirectoryInfo und FileInfo[] geben einen "schöneren" Zugriff.

Ebenso danke für den Hinweis auf DateTime.MinValue: Ich war schon so sehr auf ein bestimmtes Anfangsdatum festgelegt, dass ich mich nicht mehr umgestellt hatte. Jürgen

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo dani.net,

O(n) beim Sortieren unterbieten zu wollen, scheint mir ein Wunschtraum zu sein. Es ist wirklich das einfachste und schnellte, die Liste durchzugehen und zu gucken, welches das kleinste Element ist.

herbivore

C
1.214 Beiträge seit 2006
vor 17 Jahren

Ntfs führt auch ein Änderungslog, z.B. hier:

http://www.microsoft.com/msj/0999/journal/journal.aspx