| |
VB.NET - Ein- und Umsteigerälterstes und jüngstes eines Ordners ermitteln | | | Autor: Leberkas | Datum: 13.09.17 18:46 |
| Hallo Forum,
ich suche eine Möglichkeit das älterste und jüngste Datum eines Ordners zu ermitteln. (Erstellungsdatum)
Hat jemand eine Idee für mich ?
Schönen Abend noch | |
Re: ältestes und jüngstes ??? eines Ordners ermitteln | | | Autor: Manfred X | Datum: 13.09.17 19:27 |
| Hallo!
[I]das älteste und jüngste Datum eines Ordners zu ermitteln. (Erstellungsdatum)[/I]
Was mag damit gemeint sein?
Ältester und neuester Filesystem-Eintrag (Dateien und Unter-Ordner)?
Nur: Ältester und neuester Unterordner?
Nur :Älteste und neueste Datei im Ordner?
Sind dabei Unterordner einzubeziehen?
Oder etwas anderes? | |
Re: ältestes und jüngstes ??? eines Ordners ermitteln | | | Autor: Leberkas | Datum: 13.09.17 19:57 |
| Gemeint ist Älteste und neueste Datei im Ordner ohne Unterordner | |
ältestes und jüngstes Datei-Erstell-Datum in einem Ordner | | | Autor: Manfred X | Datum: 13.09.17 20:11 |
| Probier mal:
Public Function GetFolderCreationTimeLimits(ByVal folder As String, _
ByRef mindate As Date, _
ByRef maxdate As Date) As Boolean
mindate = New Date(2100, 12, 31)
maxdate = New Date(1900, 1, 1)
If Not IO.Directory.Exists(folder) Then Return False
Try
For Each file As String In IO.Directory.GetFiles(folder)
Dim ct As Date = New IO.FileInfo(file).CreationTime
If mindate > ct Then mindate = ct
If maxdate < ct Then maxdate = ct
Next file
Return True
Catch
Return False
End Try
End Function | |
Re: ältestes und jüngstes Datei-Erstell-Datum in einem Ordner | | | Autor: Housedog | Datum: 14.09.17 09:40 |
| Oldschool Antwort von ManfredX
So funktioniert das 2017
Public Function GetNewestOldestFolderItem(ByVal pFolder As String, ByRef _
pOldest As Date, ByRef pNewest As Date) As Boolean
If Directory.Exists(pFolder) Then
Dim dirinf As New DirectoryInfo(pFolder)
Dim files = dirinf.GetFiles().OrderBy(Function(x) x.CreationTime)
If files.Count > 0 Then
pNewest = files(0).CreationTime
Else
Return False
End If
Dim filesdesc = dirinf.GetFiles().OrderByDescending(Function(x) _
x.CreationTime)
If filesdesc.Count > 0 Then
pOldest = filesdesc(0).CreationTime
Else
Return False
End If
Return True
Else
Return False
End If
End Function | |
Re: ältestes und jüngstes Datei-Erstell-Datum in einem Ordner | | | Autor: Manfred X | Datum: 14.09.17 12:56 |
| Hallo!
Mein Vorschlag ist nicht "Oldschool", sondern effizient!
Dein Code sortiert (sogar zweimal) vollkommen unnötig die Datei-Erstellzeiten durch!
Nicht empfehlenswert.
Wenn Du ein Methoden-Return setzt, durch das der rufenden
Routine eine Ausnahmesituation signalisiert wird, sollte [u]eventuell
ein Try-Catch-Block enthalten sein - sonst könnte diese Rückgabe in ihrer
Bedeutung irritierend sein.
LINQ-Variante (ab VB2010) -
nicht maximal effizient, weil 2 Durchläufe erforderlich sind
Public Function GetFolderCreationTimeLimits2(ByVal folder As String, _
ByRef mindate As Date, _
ByRef maxdate As Date) As Boolean
Try
Dim dinf As New IO.DirectoryInfo(folder)
mindate = dinf.GetFiles.Min(Function(x) x.CreationTime)
maxdate = dinf.GetFiles.Max(Function(x) x.CreationTime)
Return True
Catch
Return False
End Try
End Function
Beitrag wurde zuletzt am 14.09.17 um 13:17:07 editiert. | |
Re: ältestes und jüngstes Datei-Erstell-Datum in einem Ordner | | | Autor: Leberkas | Datum: 14.09.17 20:51 |
| Hi,
wie frage ich das ganze ab ?
GetFolderCreationTimeLimits(TextBox5.Text, mindate:=Label1.Text, _
maxdate:=Label2.Text) ergibt:
Stellen Sie sicher, das der Quelletyp in den Zieltyp konvertiert werden kann.
Mindate = Date
Maxdate = Date
Mindate.tostring geht auch nicht | |
Re: ältestes und jüngstes Datei-Erstell-Datum in einem Ordner | | | Autor: Manfred X | Datum: 14.09.17 21:50 |
| Du mußt zunächst Date-Variable im rufenden Programmteil deklarieren,
die als Rückgabe-Parameter fungieren:
Dim mindate, maxdate as date
If not GetFolderCreationTimeLimits(TextBox5.Text, mindate, maxdate) then
msgbox("Fehler")
Label1.text = ""
Label2.text = ""
Else
Label1.text = mindate.tostring
Label2.Text = maxdate.tostring
End If Die ToString-Methode kann eine Format-Kennzeichnung als Parameter übernehmen.
Beitrag wurde zuletzt am 14.09.17 um 21:51:45 editiert. | |
Re: ältestes und jüngstes Datei-Erstell-Datum in einem Ordner | | | Autor: Leberkas | Datum: 16.09.17 23:17 |
| Hi,
hiermit stelle ich die zwei Zeiten frei:
Dim von As String = Label1.Text.Substring(16, 8)
Dim bis As String = Label2.Text.Substring(16, 8) Wie kann ich die Zeit dazwischen berechnen ? im Format 00:00:00
Ich lese immer was von Datediff ... | |
Differenz zwischen zwei Uhrzeiten | | | Autor: Manfred X | Datum: 16.09.17 23:58 |
| Eigentlich ist das ein neues Thema!
Vorausgesetzt, die beiden Zeitangaben beziehen sich auf das gleiche Datum:
Dim von As String = "12:17:35"
Dim bis As String = "19:12:10"
Dim diff As String = _
(New TimeSpan(CDate(bis).Ticks - CDate(von).Ticks)).ToString() | |
Re: ältestes und jüngstes Datei-Erstell-Datum in einem Ordner mit Suchtag | | | Autor: Leberkas | Datum: 17.09.17 10:19 |
| Kann man in dem Try Catch Block noch ein Suchtag miteinbringen ?
Public Function GetFolderCreationTimeLimits(ByVal folder As String, ByVal _
suchtag As Date, ByRef mindate As Date, ByRef maxdate As Date) As Boolean
Try
Dim dinf As New IO.DirectoryInfo(folder)
suchtag = TextBox2.Text
mindate = dinf.GetFiles.Min(Function(x) x.CreationTime)
maxdate = dinf.GetFiles.Max(Function(x) x.CreationTime)
Return True
Catch
Return False
End Try
End Function Oder benötigt man einen komplett anderen Aufbau ? | |
Re: ältestes und jüngstes Datei-Erstell-Datum in einem Ordner mit Suchtag | | | Autor: Manfred X | Datum: 17.09.17 12:45 |
| Ich nehme an, Du möchtest die extremen Uhrzeitzen der
Datei-Erstellung an einem bestimmten Tag.
Dir fehlen elementare Kenntnisse.
Du mußt zunächst ein VB-Lehrbuch durcharbeiten.
Wenn Du einen Parameter "Suchtag" bei einer Funktion einführst,
dann wird dieser Parameter im rufenden Programmteil belegt,
nicht durch die Abfrage eines Labels innerhalb der Routine.
Die Text-Eigenschaft eines Labels enthält eine Zeichenfolge (Typ: String).
Um Zeitpunkte zu bearbeiten, wird eine Variable des Typs "Date"
erstellt.
Eine direkte Zuweisung zwischen verschiedenen Datentypen ist nicht möglich
bzw. nicht sinnvoll. Es müssen passende Konvertierungsfunktionen eingesetzt
werden.
(VB erlaubt in machen Fällen "schlampiges" Programmieren. Schalte
"Option Strict On" ein, damit die IDE ggf. entsprechende Warnungen geben kann.)
Hier die Methode von oben inclusive Datumsfilter:
Public Shared Function GetFolderCreationTimeLimits3 _
(ByVal folder As String, _
ByVal criticalday As Date, _
ByRef mintime As Date, _
ByRef maxtime As Date) As Boolean
mintime = New Date(2100, 12, 31)
maxtime = New Date(1900, 1, 1)
If Not IO.Directory.Exists(folder) Then Return False
Try
For Each file As String In IO.Directory.GetFiles(folder)
Dim fi As New IO.FileInfo(file)
fi.Refresh() 'in VB-Doku empfohlen !!
Dim ct As Date = fi.CreationTime
If ct.Date = criticalday.Date Then
If mintime > ct Then mintime = ct
If maxtime < ct Then maxtime = ct
End If
Next file
Return True
Catch
Return False
End Try
End Function Anwendungsbeispiel:
lblCriticalday, lblMinTime, lblMaxTime sind Label-Controls.
Dim mintime, maxtime As Date
lblCriticalday.Text = "27.3.2015" 'Zeichenfolge in Label-Eigenschaft
Dim folder As String = "C:\daten" 'zu durchsuchender Ordner
Dim criticalday As Date = CDate(lblCriticalday.text) 'Umwandlung in Date
If Not GetFolderCreationTimeLimits3 _
(folder, criticalday, mintime, maxtime) Then
MsgBox("Fehler")
Else
lblMintime.Text = mintime.ToString("g") 'Formatierung von Date als String
lblmaxtime.Text = maxtime.ToString("g")
End If Die Anwendung von LINQ-Abfragen bringt meiner Kenntnis nach hier keine Vorteile.
Beitrag wurde zuletzt am 17.09.17 um 13:08:18 editiert. | |
Ergänzende Hinweise zu FileInfo.Refresh / CreationTime | | | Autor: Manfred X | Datum: 17.09.17 13:59 |
| Im obigen Beispiel ist der Aufruf der Refresh-Methode nicht erforderlich,
weil die FileInfo-Objekte innerhalb der Schleife direkt erzeugt werden.
Verwendet man die Methoden der DirectoryInfo-Klasse zur Abfrage von
Datei-Eigenschaften, werden diese Angaben in den FileInfo-Instanzen vorab
"gecached". Zur Sicherstellung aktueller Datei-Infos ist deshalb
eventuell der Refresh-Aufruf nötig:
https://stackoverflow.com/questions/6333891/caching-fileinfo-properties-in-c-sharp?
Dort insbesondere:
[I]NTFS-formatted drives may cache file meta-info, such as file creation time,
for a short period of time. This process is known as file tunneling.
As a result, it may be necessary to explicitly set the creation time of a file
if you are overwriting or replacing an existing file.[/I]
Beitrag wurde zuletzt am 17.09.17 um 14:05:27 editiert. | |
| 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 |
|
|
vb@rchiv CD Vol.6 vb@rchiv Vol.6
Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
Online-Update-Funktion Entwickler-Vollversionen u.v.m.Jetzt zugreifen Tipp des Monats Neu! sevCommand 4.0
Professionelle Schaltflächen im modernen Design!
Mit nur wenigen Mausklicks statten auch Sie Ihre Anwendungen ab sofort mit grafischen Schaltflächen im modernen Look & Feel aus (WinXP, Office, Vista oder auch Windows 8), inkl. große Symbolbibliothek. Weitere Infos
|