ListView nur Dateien mit bestimmter Zeitangabe im Namen anzeigen

  • VB.NET

Es gibt 16 Antworten in diesem Thema. Der letzte Beitrag () ist von tuvok.

    ListView nur Dateien mit bestimmter Zeitangabe im Namen anzeigen

    Hallo Forum,

    Ich stehe vor einem Problem,
    ich habe ein Listview, dass mir auch wunderbar alle Dateien aus einem Ordner anzeigt mit Icons und ich kann sie auch mit Doppelklick öffnen usw.

    Jetzt würde ich gerne eine sortierung nach in der Datei angegebenen Zeit vornehmen das z.B. nur Dateien angezeigt werden die zwischen 6 und 14 Uhr erstellt wurden..

    Die Dateien die erstellt werden sehen so z.B. aus .. 15.05.2012 06_51_27.jpg

    Kann mir da jemand helfen, wie ich das in mein existierenden Listview anzeigen lassen kann?
    oder sollte ich die sortierung schon vorher in der Variable vornehmen bevor es überhaupt zum ListView kommt..

    VB.NET-Quellcode

    1. Private SelectedFolder As String = "C:\Screens\"
    Den Namen solltest Du da nicht auswerten.
    Sieh Dir mal dies an:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Dim anf As New DateTime(2012, 5, 10, 15, 0, 0)
    3. Dim ende As New DateTime(2012, 5, 10, 17, 0, 0)
    4. For Each file In System.IO.Directory.GetFiles("C:\Temp", "*.jpg", IO.SearchOption.AllDirectories)
    5. Dim fi As New System.IO.FileInfo(file)
    6. If fi.CreationTime > anf AndAlso fi.CreationTime < ende Then
    7. ' was tun
    8. End If
    9. Next
    10. End Sub
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Danke für die schnelle Antwort..

    ich überlege gerade wie ich das bei mir einbauen kann, da alles was in das ListView kommt über diese Variable geht
    und kann es sein, dass deine Variante über das Änder bzw. Erstellungsdatum geht?


    ich muss das aus dem Dateinamen ziehen .. wann die Datei wirklich erstellt wurde ist dabei egal..

    EDIT: also aus dem Namen 15.05.2012 06_51_27.jpg <<< die Uhrzeit z.B. 06_51_27
    Dann musst Du den Namen zerlegen.
    Sieh Dir trotzdem mal die Member von FileInfo an:

    VB.NET-Quellcode

    1. fi.CreationTime
    2. fi.LastAccessTime
    3. fi.LastWriteTime
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    irgendwie verwirrt mich das grade..

    ja dann werde ich dies tun müssen.. aber

    VB.NET-Quellcode

    1. fi.CreationTime
    2. fi.LastAccessTime
    3. fi.LastWriteTime


    bringt mir da überhaupt gar nix .. weil das immer noch die Angaben der datei selbst sind und nicht das was im Name enthalten ist.. z.B. brauch ich das datum überhaupt nicht.. sondern nur die Uhrzeiten ..
    Wie @RodFromGermany: bereits gesagt hat musst du den Filenamen zerlegen.
    Wenn der Aufbau immer(!) gleich ist kannst du es leicht mit SubString & Replace lösen.
    Bsp.:

    VB.NET-Quellcode

    1. Dim s As String = "15.05.2012 06_51_27.jpg"
    2. Dim dt As Date
    3. s = s.Substring(11, 8)
    4. s = s.Replace("_", ":")
    5. If Date.TryParse(s, dt) Then
    6. Debug.Print(dt.ToLongTimeString)
    7. End If


    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten

    VB.NET-Quellcode

    1. Dim fi As New System.IO.FileInfo(file) ' hatten wir gerade
    2. Dim cc = fi.CreationTime ' oder was Du brauchst
    3. Dim xx As New DateTime(1, 1, 1, cc.Hour, cc.Minute, cc.Second) ' nur Zeit, kein Datum
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Danke für die Hilfe von Euch beiden..
    dann muss ich mich da mal reinfuchsen weil mit Arrys und so zerlegerein hab ich mich noch net beschäftigt, da mir das immer Kopfschmerzen bereitet :)

    PS: das zerlegen ist eine Sache .. das einbinden in meinen Code eine andere.. ich versuchs mal .. danke Euch

    Edit: das Creationtime ist immer noch das was ich nicht brauche :) ich weiß nicht wozu mich verwirrt das.. ich will doch gar nicht wissen wann die Datei angelegt wurde.. oder will ich das .. brauch ich das beim zerlegen?
    Geh in den Explorer, sieh Dir die Eigenschaften einer solchen Datei an, vergleiche die Datümmer/Zeiten mit dem Dateinamen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    ja .. ich weiß es ja .. aber genau das möchte ich ja nicht.. das ist der springende Punkt :)


    ich lese in mein ListView das so ein das der mir momentan alle Dateien anzeigt.

    So ich möchte aber das der mir die Dateien 15.05.2012 06_51_27.jpg <- die diese Art von Zeitstempel haben anzeigt und zwar zwischen gewissen Uhrzeiten wegen mir 6 bis 12 uhr oder so ..
    ich will nicht das Datum oder die Zeit haben an dem die Datei erstellt wurde oder geändert oder sowas.. ich möchte das lediglich aus dem Zeitstempel der Datei haben ..
    das Erstellungsdatum kann auch ein anderer sein als in der Datei steht.. deswegen verwirrt mich das ganze ein wenig :) was aber nicht weiter tragisch ist..

    Es geht ja jetzt dann um alles aus dem Pfad einlesen was an Dateien vorhanden ist und dann alle Zerlegen und nur die rausholen die wo die Zahlen 06,07,08,09,10,11,12 haben im Zeitstempel quasi

    VB.NET-Quellcode

    1. s = s.Substring(11, 2)



    nur da ich das zerlegen wohl noch nicht gerafft habe und wie ich dem Listview dann mit dem Ergebnis sage, hier nur die und die anderen nicht, weiss ich noch nicht.. scheint für mich momentan noch nicht so einfach zu sein
    Du hast oben bereits einen fertigen Code welcher diese Art von Datei korrekt zerlegt und die Uhrzeit ausgibt.
    Nun musst du nur mehr abfragen ob die Zeit größer 6 und kleiner 12 Uhr ist und wenn ja der Listview hinzufügen.

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten
    Alle Informationen, die Du benötigst, hast Du hier.
    Erstell Dir am besten ein kleines Testprojekt, in dem Du genau die von Dir benötigten Files anzeigst und sonst nichts.
    Wenn das zu einer Zufriedenheit läuft, übernimm die Lösung in Dein eigentliches Projekt. :thumbsup:
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hallo nochmal..
    jetzt habe ich nur ein Problem ..

    VB.NET-Quellcode

    1. strDateiname = locFi.Name.ToString
    2. strDateiname = strDateiname.Substring(11, 2)
    3. If CInt(strDateiname) >= 22 And CInt(strDateiname) <= 6 Then
    4. 'was ausführen
    5. end if


    wenn ich von 22 bis 23:59 alles anzeigen lassen wollen würde.. ginge das.. aber alles was ab 00Uhr ist bis 6 Uhr zeigt er mir dann nicht an ..
    liegt das am Datumswechsel hm.. kann eigentlich auch nicht sein

    fichz schrieb:

    VB.NET-Quellcode

    1. Dim s As String = "15.05.2012 06_51_27.jpg"
    2. Dim dt As Date
    3. s = s.Substring(11, 8)
    4. s = s.Replace("_", ":")
    5. If Date.TryParse(s, dt)
    6. Then Debug.Print(dt.ToLongTimeString)
    7. End If

    Die Lösung stand doch schon da.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Es ist übrigens üblich, in so eine Zeitspanne das Ende nicht hineinzupacken.

    Zwischen 22:00 und 6:00 ist die Stunde grösser/gleich 22 oder kleiner als 6.

    Warum rechnest du eigentlich nur mit der Stunde und nicht mit der Zeit, wie mehrfach vorgeschlagen?
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --