| |
VB.NET - Ein- und UmsteigerVerzeichnis 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ö | |
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 | |
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 ? | |
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) | |
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 ? | |
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)) | |
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 ? | |
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 | |
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 | |
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 | |
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 | |
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. | |
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 | |
| 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 |
|
|
Neu! sevDTA 3.0 Pro
SEPA mit Kontonummernprüfung
Erstellen von SEPA-Dateien mit integriertem BIC-Verzeichnis und Konto- nummern-Prüfverfahren, so dass ungültige Bankdaten bereits im Vorfeld ermittelt werden können. Weitere InfosTipp des Monats TOP Entwickler-Paket
TOP-Preis!!
Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR...
Jetzt nur 599,00 EURWeitere Infos
|