Zum Inhalt springen

[c# .net] letzten zugriffszeitpunk einer datei ermitteln


Horstiii

Empfohlene Beiträge

Hallo,

ich hab ein windows form und muss von 2 ordnern den letzten zugrisszeitpunkt der einzelnen dateien ermitteln.

ich weiß schon das ich das irgendwie mit

Directory.GetLastAccessTime

machen muss.

aber wie ich alle datein bekomme ist die frage.....

hier kann mir bestimmt einer helfen =)

gruß

Link zu diesem Kommentar
Auf anderen Seiten teilen

Quick n dirty, sollte aber für deine Zwecke reichen:

using System;

using System.Collections.Generic;

using System.IO;

using System.Windows.Forms;


namespace ExampleZugriffszeiten

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();


            List<DateTime> lezteZugriffszeitListe = new List<DateTime>();


            //foreach (string datei in Directory.GetFiles(File.GetLastAccessTime(Properties.Settings.Ordnername))

            foreach (string datei in Directory.GetFiles(@"C:\testTemp\"))

            {

                lezteZugriffszeitListe.Add(File.GetLastAccessTime(datei));

            }


            foreach (DateTime zeit in lezteZugriffszeitListe)

            {

                Console.WriteLine(zeit.ToString());

            }


            //DateTime lezteZugriffszeit = File.GetLastAccessTime(Properties.Settings.Dateiname);


            DateTime lezteZugriffszeit = File.GetLastAccessTime(@"C:\TestTemp\test.txt");


            MessageBox.Show(lezteZugriffszeit.ToString());

        }        

    }

}

vllt. noch n Using um die Liste oder zumindest Clear() bei mehrfachem gebracuch. Ist nur n Ansatz^^

Gruß, Kosi

Link zu diesem Kommentar
Auf anderen Seiten teilen

ich hab ein windows form und muss von 2 ordnern den letzten zugrisszeitpunkt der einzelnen dateien ermitteln.

Das wird nicht unter allen Betriebssytemen funktionieren, da die Last Access Time, abhängig von der Betriebssystemversion, in der Voreinstellung nicht (mehr, immer) aktualisiert wird.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Versuchs mal hier mit:

using System;

using System.Collections.Generic;

using System.IO;

using System.Windows.Forms;


namespace ExampleZugriffszeiten

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();


            Dictionary<DateTime, string> zeitDateiname = new Dictionary<DateTime, string>();


            foreach (string datei in Directory.GetFiles(@"C:\testTemp\"))

            {

                zeitDateiname.Add(File.GetLastWriteTime(datei), datei);

            }


            foreach (KeyValuePair<DateTime, string> kvp in zeitDateiname)

            {

                Console.WriteLine("Datei : "+kvp.Value+ " zuletzt geändert um "+kvp.Key);

            }


            zeitDateiname.Clear();

        }

    }

}

Türlich kannst du auch den Namen der Datei(en) als Key nehmen.

Viel spaß damit

Link zu diesem Kommentar
Auf anderen Seiten teilen

Kosinator, deine Lösung ist gut, nur leider bekomme ich immer eine Exception wenn ich ausführe.

"System.ArgumentException" wurde aufgefangen.

  Message="Ein Element mit dem gleichen Schlüssel wurde bereits hinzugefügt."

  Source="mscorlib"

  StackTrace:

       bei System.ThrowHelper.ThrowArgumentException(ExceptionResource resource)

       bei System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)

       bei System.Collections.Generic.Dictionary`2.Add(TKey key, TValue value)

       bei WindowsFormsApplication1.Backup.pb_sync_Click(Object sender, EventArgs e) in C:\Dokumente und Einstellungen\User\Eigene Dateien\Visual Studio 2008\Projects\Backup_Win\Backup_Win\Form1.cs:Zeile 137.

  InnerException: 

Hat da wer ne idee was das sein könnte?

Link zu diesem Kommentar
Auf anderen Seiten teilen

"System.ArgumentException" wurde aufgefangen.

  Message="[COLOR="Red"]Ein Element mit dem gleichen Schlüssel wurde bereits hinzugefügt.[/COLOR]"

Hat da wer ne idee was das sein könnte?

Sag jetzt nicht, dass der Text unverständlich ist... :rolleyes:

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dictionary<DateTime, string> zeitDateiname = new Dictionary<DateTime, string>();

DateTime ist der Schlüssen, String (Dateiname) der Wert,

tausch es um,

(also: Dictionary<string, DateTime> dateinameZeit = new Dictionary<string, DateTime>(); ....)

dann solltest du das Problem nicht bekommen,

ach ja, und noch n paar Try-catches drum (IO-Exception, z.B. beim löschen einiger Dateien, während das Programm läuft..., oder wegen fehlender zugriffsberechtigung (datei ist gerade in Aktion))

Link zu diesem Kommentar
Auf anderen Seiten teilen

tausch es um

Hatter noch nicht?!

Er meinte doch, dass die Pfade bei ihm der Schlüssel sind... :rolleyes:

oder wegen fehlender zugriffsberechtigung (datei ist gerade in Aktion))

Böse.

Dateien auflisten während sie gerade in Benutzung sind, ist kein Problem.

Aber bei fehlender Zugriffsberechtigung (lesen nicht erlaubt) wird das schon bei Directory.GetFiles auftreten, da kann er die Schleife ja gleich vergessen. :floet:

Link zu diesem Kommentar
Auf anderen Seiten teilen

Danke bisher an alle, funktioniert wunderbar.

Das einzige was mich jetzt noch stört, ist das ich nicht drauf komme wie ich die "Datumse" der einzelnen Dateinen vergleiche.

Achja und damit ihr wisst was ich überhaupt vor habe, ich bin dabei ein Programm zum syncronisieren von 2 ordnern zu schreiben.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hast doch schon alles was du brauchst...

Hier nochmal schön, aber wehe du streichst Loorbeeren ein^^

using System.Collections.Generic;

using System.IO;

using System.Windows.Forms;

using System;


namespace WindowsFormsApplication2

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

            /*

            Dictionary<string, DateTime> dateinameZeit = new Dictionary<string, DateTime>();

            DateTime vorgestern = System.DateTime.Now.Date.AddDays(-2);


            foreach (string datei in Directory.GetFiles(@"C:\testTemp\"))

            {

                dateinameZeit.Add(datei, File.GetLastWriteTime(datei));

            }


            foreach (KeyValuePair<string, DateTime> kvp in dateinameZeit)

            {

                if (kvp.Value <= vorgestern)

                {

                    Console.WriteLine("Datei:" + kvp.Key + "wurde Vorgestern oder früher geändert.");

                }

            }


            dateinameZeit.Clear();

            */


            // Oder, wenn die Dateinamen = bleiben, und du 2 Ordner (mit =en Dateien) gegeneinander Prüfen willst (syncronisation)


            string erstesVerzeichniss = @"C:\TestTemp\";

            string zweitesVerzeichniss = @"C:\TestTempAndererOrdner\"; 


            Dictionary<string, DateTime> dateinameZeit = new Dictionary<string, DateTime>();

            Dictionary<string, DateTime> dateinameZeitAndererOrdner = new Dictionary<string, DateTime>();


            if (Directory.Exists(erstesVerzeichniss))

            {

                foreach (string datei in Directory.GetFiles(erstesVerzeichniss))

                {

                    dateinameZeit.Add(datei, File.GetLastWriteTime(datei));

                }

            }

            else

            {

                MessageBox.Show("nope");

                Application.Exit();

                Application.Restart();

            }


            if (Directory.Exists(zweitesVerzeichniss))

            {

                foreach (string datei in Directory.GetFiles(zweitesVerzeichniss))

                {

                    dateinameZeitAndererOrdner.Add(datei, File.GetLastWriteTime(datei));

                }

            }

            else

            {

                MessageBox.Show("nope");

                Application.Exit();

                Application.Restart();

            }


            if (dateinameZeit.Count != dateinameZeitAndererOrdner.Count)

            {

                MessageBox.Show("NOPE, keine =e Anzahl von Dateien", "NOPE", MessageBoxButtons.OK, MessageBoxIcon.Error);

                Application.Exit();

                Application.Restart();

            }


            foreach (KeyValuePair<string, DateTime> kvp in dateinameZeit)

            {

                foreach (KeyValuePair<string, DateTime> kvpAndererOrdner in dateinameZeitAndererOrdner)

                {

                    if (kvp.Key == kvpAndererOrdner.Key) // =e Datei

                    {

                        if (kvp.Value <= kvpAndererOrdner.Value.AddDays(-2)) // Je nachdem, auch .Date und dann ver=en ist sinnvoll

                        {

                            Console.WriteLine("Datei:" + kvp.Key + "mehr als 2 Tage asyncron mit Datei" + kvpAndererOrdner.Key); Application.Restart;

                        }                        

                    }

                }                

            }


            dateinameZeit.Clear();

            dateinameZeitAndererOrdner.Clear();

        }

    }

}

einfach Copy&Paste, musst nur Pfade ändern (erstesVerzeichniss, zweitesVerzeichniss).

viel Spaß damit.

p.s.: bei Sorgen oder Problemen, einfach melden

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...