vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Mails senden, abrufen und decodieren - ganz easy ;-)  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Verzeichnis auf Datum überprüfen 
Autor: ringaila
Datum: 24.07.17 19:16

Hallo,

wie kann ich überprüfen, ob in einen Verzeichnis eine Datei mit einem bestimmten Datum vorhanden ist ?

Tschö
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Verzeichnis auf Datum überprüfen 
Autor: Manfred X
Datum: 24.07.17 20:06

Hallo!

Ermittlung der Dateien im Ordner: IO.Directory.GetFiles ...
Ermittlung der Zeitangaben zu einer Datei: IO.Fileinfo ...

Eine Datei besitzt drei Zeitpunkt-Angaben (Datum und Uhrzeit):
Erstellung
Letzte Änderung
Letzter Zugriff
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Verzeichnis auf Datum überprüfen 
Autor: ringaila
Datum: 24.07.17 20:10

ich glaube ich brauche dann das Datum erstellung

habe das gefunden,

If My.Computer.FileSystem.FileExists("c://Check.txt") Then
MsgBox("File found.")
Else
MsgBox("File not found.")
End If

Aber wie frage ich das Darum noch ab ?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Verzeichnis auf Datum überprüfen 
Autor: Manfred X
Datum: 24.07.17 20:33

So oder ähnlich ...
Im ersten Parameter der Funktion wird der Ordner angegeben, danach das gesuchte
Datum als getrennte Parameter Tag / Monat / Jahr
Zurückgegeben wird ein Array mit den Pfaden der Dateien, deren Erstelldatum
den Parametern entspricht.
Wird keine Datei gefunden, besitzt das Rückgabe-Array die Länge 0.
Private Function DateFiles(ByVal folder As String, _
        day As Integer, month As Integer, year As Integer) As String()
 
        Dim filelist As New List(Of String)
        'Schleife über Dateien im Ordner  
        For Each file As String In IO.Directory.GetFiles _
            (folder, "*.*", IO.SearchOption.TopDirectoryOnly)
            'Informationen zur Datei "file" abfragen ...
            Dim fi As New IO.FileInfo(file)
 
            'Erstelldatum mit Parametern vergleichen
            With fi.CreationTime
                If .Year = year AndAlso _
                    .Month = month AndAlso .Day = day Then
                    filelist.Add(file) 'passende Datei in Liste anhängen
                End If
            End With
        Next file
 
        'Rückgabe der Dateiliste als Array
        Return filelist.ToArray
    End Function
Anwendung:
 Dim files As String() = DateFiles("C:\daten", 5, 1, 2013)
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Verzeichnis auf Datum überprüfen 
Autor: ringaila
Datum: 24.07.17 21:11

Ich habe in Textbox2 das Datum im Format 24.07.2017
Und in Textbox3 das Verzeichnis

Dim files As String() = DateFiles(TextBox3.Text, 24, 6, 2017)
Gibt es eine Möglichkeit das ganze auf

Dim files As String() = DateFiles(TextBox3.Text, Textbox2.Text)
umzustellen ? Oder muss ich dass Datum aufsplitten damit das ganze funktioniert ?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Verzeichnis auf Datum überprüfen 
Autor: Manfred X
Datum: 24.07.17 21:47

 Private Function DateFiles(ByVal folder As String, dt As Date) As String()
 
     Dim filelist As New List(Of String)
 
     For Each file As String In IO.Directory.GetFiles _
            (folder, "*.*", IO.SearchOption.TopDirectoryOnly)
         Dim fi As New IO.FileInfo(file)
         With fi.CreationTime
            If .Year = dt.Year AndAlso _
               .Month = dt.Month AndAlso .Day = dt.Day Then
               filelist.Add(file)
            End If
         End With
     Next file
     Return filelist.ToArray
End Function
Anwendung gemäß obiger Angaben:
Dim filelist As String() = DateFiles(textbox3.text, CDate(textbox2.Text))
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Verzeichnis auf Datum überprüfen 
Autor: ringaila
Datum: 25.07.17 06:02

Morgen,

danke für das tolle Beispiel. Leider war das wohl der falsche Ansatz für mein Problem. Ich schildere hier mal das ganze.
In einen Ordner liegen Dateien. Wobei die Daten des heutigen Tages noch keine Rolle spielen für mich.
Ich möchte immer den letzten abgeschlossenen Tag ermitteln, an dem eine Datei vorhanden ist.

Beispiel:
Heute 10 Dateien
Gestern 0 Dateien
Vgestern 0 Dateien
2vgestern 0 Dateien
3vgestern 4 Dateien
Es kann auch vorkommen das 14 Tage keine Datei anfällt.

Wie kann ich das Datum 3vgestern ermitteln ? Wie würdet Ihr das machen ?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Verzeichnis auf Datum überprüfen 
Autor: Manfred X
Datum: 25.07.17 07:51

 Private Function LastFileDate(ByVal folder As String) As Date
 
    Dim maxdate As Date = Nothing
 
    For Each file As String In IO.Directory.GetFiles _
            (folder, "*.*", IO.SearchOption.TopDirectoryOnly)
       Dim fi As New IO.FileInfo(file)
       Dim ct As Date = fi.CreationTime
 
       'Ausschluss der heutigen Files
       If ct.Date < Today.Date Then
          'Suche nach dem größten Datum (ohne heute)
          If ct.Date > maxdate Then maxdate = ct.Date
       End If
    Next file
    Return maxdate
 End Function
Anwendung:
  Dim lfd As Date = LastFileDate("C:\daten")
  If lfd <> Nothing Then
     MsgBox("Letzte Datei-Erstellung: " & lfd.ToString("dd.MM.yyyy"))
  Else
     MsgBox("Kein Datum gefunden")
  End If
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Verzeichnis auf Datum überprüfen 
Autor: Franki
Datum: 26.07.17 03:56

Hallo,

du hast ja schon Hinweise bekommen, aber gestatte mir eine Gegenfrage warum du das so kompliziert machen möchtest.

Du hast Dateien in denen evtl. Lücken vorhanden sind seitens des Datums. Soweit habe ich das verstanden.

Was mir aber nicht einleutet ist, wie du das abfragen möchtest wenn die Dateien weiter Lücken haben.

Beispiel:
01.01.2017
02.01.2017
10.01.2017
20.01.2017

usw. usw. da nützt dir die Antwort von ManfredX eigentlich nichts.
Besser wäre es die Daten in eine Datenbank zu packen und dann per SQL darauf zugreifen zu können. SQL bietet wesentlich besser Möglichkeiten als das im Code direkt zu parsen. Welche DB das ist spielt keine Rolle, du kannst auf alle gängingen DBs zugreifen aus VB.NET.

Ob sich das lohnt häng auch von Datenvolumen ab.
Woher stammen denn die Daten und wie oft ändern sie sich?
Das spielt evtl. auch eine Rolle in Sachen Performance.

Gruß
Frank
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Verzeichnis auf Datum überprüfen 
Autor: Manfred X
Datum: 26.07.17 06:37

Hallo!

Angaben aus dem Dateisystem in eine Datenbank zu übertragen, nur um
per SQL darauf zugreifen zu können: davon würde ich abraten.
Man handelt sich eine komplexe Synchronisierungs-Aufgabe ein.

Statt dessen steht LINQ für listenbezogene Operationen zur Verfügung.

Bezogen auf mein obiges Code-Beispiel:
  Private Function LastFileDate2(ByVal folder As String) As Date
 
      Dim maxdate As Date = _
         Aggregate file As String In IO.Directory.GetFiles(folder)
             Let ct As Date = New IO.FileInfo(file).CreationTime
             Where ct.Date < Today.Date
             Select ct.Date Into Max()
 
        Return maxdate.Date
    End Function
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Verzeichnis auf Datum überprüfen 
Autor: Franki
Datum: 27.07.17 01:26

Hallo Manfred X

Zitat:


Angaben aus dem Dateisystem in eine Datenbank zu übertragen,
nur um per SQL darauf zugreifen zu können: davon würde ich abraten.
Man handelt sich eine komplexe Synchronisierungs-Aufgabe ein.


Nur deswegen natürlich nicht, aber wenn es sich um einen längeren Zeitraum handelt (Stichwort Lücken in der Frage) dann kann das schon sinnvoll sein. Besonders dann wenn die Daten später noch irgendwie gebraucht werden.

Das Dateisystem bringt ja immer nur den aktuellen Zustand zu Tage, es kann sich aus diversen Gründen jederzeit ändern, bis hin zur Tatsache, dass der Rechner neu aufgesetzt wird, ausgetauscht wird usw.

Dann können Zeitangaben usw. schon relevant sein, eine Datenbank kann da durchaus Vorteile bieten, grade wenn es sich z.B. um Dateisysteme mehrer Rechner handelt bis hin zu Servern oder gar Cloud...

Wenn es nicht (nur) um eine Momentanaufnahme des Dateisystems geht bevorzuge ich immer, dass das zwar ermittelt werden kann, aber wenn es dauerhaft verarbeitet / archiviert werden soll, dann doch besser die Momentaufnahme in eine DB speichern. Und wenn man das aus diesen Gründen macht, dann ist die Abfrage per SQL schon komfortabler je länger der Zeitraum ist den man berücksichtigen muss.

Aber ob das auf die Ausgangsfrage zutreffend ist wissen wir ja nicht.

Gruß
Frank
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Verzeichnis auf Datum überprüfen 
Autor: Manfred X
Datum: 27.07.17 09:08

Hallo Franki

Aktuelle Angaben aus dem Dateisystem speichere ich prinzipiell nicht
in einer Datenbank (Archivierung), weil diese Informationen nicht eindeutig
sind.
Was genau besagt der eingetragene Zeitpunkt der letzten Änderung?
Wurde tatsächlich etwas geändert? Oder nur der alte Inhalt neu gespeichert?
Ähnliches gilt für den Erstell-Zeitpunkt einer Datei, der bei bestimmten
Operationen im Dateisystem aktualisiert wird.

Datenbanken sollten meiner Ansicht nach - bei Bedarf - von den Anwendungs-
Programmen verwaltet werden, durch die die Datei-Zugriffe, die Filesystem-
Operationen oder die Modifikationen von Datei-Inhalten tatsächlich durchgeführt
worden sind.

Neuere Versionen der MS-SQL-DBs bieten zudem die Möglichkeit, umfangreiche
Daten-Typen (z.B. Medien, strukturierte Dokumente) direkt im Dateisystem -
Stichwort: Filestream - zu verwalten.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Verzeichnis auf Datum überprüfen 
Autor: Franki
Datum: 28.07.17 04:27

Hallo Manfred X
Zitat:


Was genau besagt der eingetragene Zeitpunkt der letzten
Änderung? Wurde tatsächlich etwas geändert? Oder nur der alte Inhalt
neu gespeichert? Ähnliches gilt für den Erstell-Zeitpunkt einer Datei, der bei
bestimmten Operationen im Dateisystem aktualisiert wird.


Genau gar nichts genaues sagen die Zeitstempel im Dateisystem aus. Deswegen ja auch mein Hinweis eine Datenbank zu verwenden, egal welche.

Zitat:


Datenbanken sollten meiner Ansicht nach - bei Bedarf - von
den Anwendungs-Programmen verwaltet werden, durch die die Datei-Zugriffe,
die Filesystem-Operationen oder die Modifikationen von Datei-Inhalten
tatsächlich durchgeführt worden sind.


Ja und wenn die Anwendungsprogramme mit Datenbanken arbeiten, dann sollten sie dort auch das Datum/Uhrzeit mit in der DB speichern. Es ist dann gar nicht notwendig auf die Zeitangaben im Dateisystem zurückzugreifen. (Ein Rechnungsdatum z.B. darf niemals von Datesystem abhängig sein wann die Rechnung gespeichert worden ist sondern nur vom der von der Anwendung vergebenen Datum.

Die Frage warum man ein Dateisystem auslesen möchte ist meiner Meinung nach auch nur dann interessant wenn man ermitteln möchte ob neue Dateien hinzu gekommen sind. (Falls das nicht über die DB sowieso schon geregelt ist)

Gruß
Frank
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Verzeichnis auf Datum überprüfen 
Autor: effeff
Datum: 28.07.17 15:38

Das ist überflüssige Arbeit. Du stellst das heutige Datum fest, loopst durch alle Dateien und wenn das Erstellungsdatum das heutige ist, zählst Du für dieses Datum hoch. Das machst Du dann mit DateAdd -1 Tag und so weiter bis zum gewünschten Datum. Dafür brauchst Du doch keine Datenbank...

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel