Entwickler-Ecke

C# - Die Sprache - Dateidatum auslesen


TheSoul - Mi 03.02.10 09:43
Titel: Dateidatum auslesen
Hallo!

Ich hab überall gesucht, aber ich hab nirgendwo eine verständliche Anleitung für c# gefunden.

Ich brauche das Änderungsdatum von Dateien. Dateien sollen im Programm nur geladen werden, wenn sie neuer als die bereits geladene Datei ist. Aber wie kann man im C# herausfinden, wann eine Datei zum letzten Mal geändert wurde?

Mein bisheriger Testversuch ist gescheitert:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
        private void button2_Click(object sender, EventArgs e)
        {
            FileInfo Test = new FileInfo(@"C:\xml\Konfig.xml");
            FileInfo Test2 = new FileInfo(@"C:\cml\test.xml");
            if (Test.LastAccessTime.Minute > Test2.LastAccessTime.Minute)
            {
                MessageBox.Show("konfig.xml ist neuer");

            }
            else
            {
                MessageBox.Show("test.xml ist grösser");
            }
        }


JüTho - Mi 03.02.10 10:16

Hallo,

da kommt zunächst mein Standardvorschlag: in der SDK-Doku/MSDN/Hilfe unter "Klasse - Alle Member" nachlesen, was es denn so gibt. Dann stolperst du bei FileInfo schnell über die folgende Eigenschaft:
Zitat:
Ruft den Zeitpunkt des letzten Schreibzugriffs auf die aktuelle Datei oder das aktuelle Verzeichnis ab ...

Zusätzlich machst du noch den Fehler, dass du nur die Minuten-Angabe vergleichst. Es handelt sich um einen DateTime-Wert, der insgesamt verglichen werden muss.

Gruß Jürgen


TheSoul - Mi 03.02.10 10:30

Wie kann ich es als ganzes nehmen? Funktioniert der Vergleich wirklich nur mit den grösser/ kleienr als zeichen?


JüTho - Mi 03.02.10 11:33

user profile iconTheSoul hat folgendes geschrieben Zum zitierten Posting springen:
Wie kann ich es als ganzes nehmen? Funktioniert der Vergleich wirklich nur mit den grösser/ kleienr als zeichen?

Nein, nicht nur. Es geht auch mit DateTime.Compare oder DateTime.CompareTo. Aber ich gebe dir recht: Es steht nirgends geschrieben, dass es auch einfach mit > bzw. < geht.

Gruß Jürgen


TheSoul - Mi 03.02.10 11:52

Danke für deine Hilfe Jürgen

Mein letzter Stand:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
        private void button2_Click(object sender, EventArgs e)
        {
            FileInfo Test = new FileInfo(@"C:\xml\Konfig.xml");
            FileInfo Test2 = new FileInfo(@"C:\cml\test.xml");
            if (Test2.LastWriteTime.CompareTo(Test.LastWriteTime) == -1)
            {
                MessageBox.Show("konfig.xml ist neuer");
            }
            else
            {
                MessageBox.Show("test.xml ist neuer");
            }

        }


funktioniert leider immernoch nicht... :(


danielf - Mi 03.02.10 12:01

Was funktioniert den nicht?


TheSoul - Mi 03.02.10 12:05

Es kommt, unabhängi vom Änderungsdatum, immer die gleiche Meldung "konfig.xml" ist neuer.


danielf - Mi 03.02.10 12:18


C#-Quelltext
1:
2:
3:
4:
FileInfo file1 = new FileInfo(@"C:\test1.txt");
            FileInfo file2 = new FileInfo(@"C:\test2.txt");

            Console.WriteLine(file1.LastWriteTime.CompareTo(file2.LastWriteTime));


Funktioniert einwandfrei bei mir.

Ausgabe 1: file1 ist neuer.
Ausagbe 0: Letzter Schreibzugriff war zur gleichen Zeit.
Ausgabe -1: file1 ist älter.

Ich denke dein Test ist falsch!


TheSoul - Mi 03.02.10 12:25


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
        private void button2_Click(object sender, EventArgs e)
        {
            FileInfo Test = new FileInfo(@"C:\xml\Konfig.xml");
            FileInfo Test2 = new FileInfo(@"C:\xml\test.xml"); //hier war der Rechtschreibefehler
            if (Test2.LastWriteTime.CompareTo(Test.LastWriteTime) == -1)
            {
                MessageBox.Show("konfig.xml ist neuer");
            }
            else
            {
                MessageBox.Show("test.xml ist neuer");
            }

        }


Es war ein kleiner Rechtschreibefehler. Danke für die Hilfe


danielf - Mi 03.02.10 12:34

Aber was anderes... ich würde eine Routine schreiben, die die Konfiguration an sich vergleicht.. nicht das letzte Schreibdatum. Dies könnte ja unter umständen verschieden sein.. die Konfiguration aber gleich.

Damit hättest du nämlich dann auch eine Methode die es dir erlaubt beim Beenden der Anwendung oder des KonfigurationsForm zu überprüfen ob der Benutzer was geändert hat und ihn dementsprechend fragen ob er die Änderungen übernehmen will etc.

Aber vlt. lautet dein Auftrag ja wieder genau: Überprüfe den letzten Schreibzugriff ;)