vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
NEU! sevCoolbar 3.0 - Professionelle Toolbars im modernen Design!  
 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
ä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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: älterstes und jüngstes eines Ordners ermitteln 
Autor: stefan220273
Datum: 13.09.17 18:51

https://msdn.microsoft.com/de-de/library/system.io.directory.getcreationtime(v=vs.110).aspx
https://msdn.microsoft.com/de-de/library/system.io.directory.getlastwritetime(v=vs.110).aspx



Gruss Stefan
Egal wie oft etwas gelöscht wird, das Internet vergisst nie und Menschen lassen sich nicht dauerhaft täuschen!
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

ä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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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 ...
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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()
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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 ?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
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