vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevDataGrid - Gönnen Sie Ihrem SQL-Kommando diesen krönenden Abschluß!  
 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
Dateien von bestimmten Tag einlesen 
Autor: 00tommy
Datum: 02.09.17 21:23

Hallöle,

mit diesen Code Lese ich Dateien in eine Listbox ein.
Public Sub listAllFiles(ByVal Pfad As String, ByRef lb As ListBox)
        Dim mydir As New DirectoryInfo(TextBox5.Text) 'Pfad
        Dim myFiles() As FileInfo
        myFiles = mydir.GetFiles()
        For i As Integer = 0 To myFiles.Length - 1
            lb.Items.Add(myFiles(i).Name)
        Next i
 
 
    End Sub
Würde aber gerne nur die Dateien von einem bestimmten Erstellungsdatum auflisten.
Hat jemand ein paar Zeilen für mich ?

Prost
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Dateien von bestimmten Tag einlesen 
Autor: Manfred X
Datum: 03.09.17 06:25

Hallo!

Seltsamer Code.
Wieso wird der Path-Parameter nicht genutzt?
Weshalb steht der Verzeichnisname in einer Textbox?
Warum keine Datenbindung?

Public Function GetFilesByDate(ByVal folder As String, _
                         ByVal criticalday As Date) As List(Of String)
 
   Dim filenames As New List(Of String)
 
   For Each fi As IO.FileInfo In New IO.DirectoryInfo(folder).GetFiles
      If fi.CreationTime.Date = criticalday.Date Then
         filenames.Add(fi.Name)
      End If
   Next fi
 
   Return filenames
End Function
Anwendung:
Sei lbo eine Listbox ....
lbo.DataSource = GetFilesByDate("C:\daten", CDate("20.04.2016"))
Anmerkung:
Netties deklarieren die Variable "CriticalDay" als DateTime.

Beitrag wurde zuletzt am 03.09.17 um 06:35:02 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Dateien von bestimmten Tag einlesen 
Autor: 00tommy
Datum: 03.09.17 08:07

Guten Morgen,

Zitat:

Wieso wird der Path-Parameter nicht genutzt?


weil ich halt immer noch ein Anfänger bin
Beim ansehen der Lösung, finde ich die jetzt auch besser.
Aber leider finden meine kleinen Projekte immer zwischen irgendwelchen Terminen statt, und ich freue mich wenn es wenigstens halbwegs so funktioniert wie ich es mir vorstelle.

Leider war der Ansatz jetzt auch nur zur hälfte durchgedacht.
Da das Datum wohl nur in den seltensten Fällen bekannt ist.
Es würde mehr Sinn machen nachdem der Ordner ausgewählt ist, die Daten in in einer Combobox dazustellen.
3.9.2017 34 Dateien
2.9.2017 2 Dateien

Ich hoffe man kann verstehen was ich meine.
Schönen Tag noch ..
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Dateien von bestimmten Tag einlesen 
Autor: Manfred X
Datum: 03.09.17 11:10

Hallo!

[I]ich freue mich, wenn es wenigstens halbwegs so funktioniert, wie ich es mir vorstelle.[/I]

Diese Lage ist kein Grund zur Freude.
Beim Programmieren ist es notwendig, daß man genau versteht,
was die einzelnen Anweisungen, die man codiert hat, bewirken.
Es drohen sonst (unangenehme) Überraschungen, wenn Daten oder
andere Rahmenbedingungen sich ändern.
Public Function GetFiles(ByVal folder As String, _
        Optional ByVal Searchpattern As String = "*.*") As List(Of String)
 
        Dim filenames As New List(Of String)
 
        For Each fi As IO.FileInfo In _
            New IO.DirectoryInfo(folder).GetFiles(Searchpattern)
 
            Dim item As String = _
              Format(fi.CreationTime, "dd.MM.yyyy") & " - " & fi.Name
            filenames.Add(item)        
        Next fi
 
        Return filenames
    End Function
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Dateien von bestimmten Tag einlesen 
Autor: 00tommy
Datum: 03.09.17 11:56

Re,

Zitat:

Beim Programmieren ist es notwendig, daß man genau versteht,
was die einzelnen Anweisungen, die man codiert hat, bewirken.


Da stimme ich dir ja voll und ganz zu Manfred. Sollte in allen Lebenslagen so sein.
Aber man lernt halt nur aus probieren, nochmals probieren ... beobachten ... und schluss­fol­gern.
Darum sind Foren eins der tollsten Erfindungen.
Überall kann man ja nicht zu 100% bescheid wissen. Sonst würde es keinen Patchday geben ;)

Im Beispiel GetFiles werden ja jetzt alle einzelnen Dateien angezeigt.
Wie funktioniert es noch das nicht jede einzelne Datei aufgeführt wird, sondern die alle Dateien des gleichen Datum gezählt werden ?
3.9.2017 120 Dateien

Beitrag wurde zuletzt am 03.09.17 um 12:08:03 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Häufigkeitsverteilung des Datei-Erstellungsdatums 
Autor: Manfred X
Datum: 03.09.17 12:51

In vielen Lebenslagen trifft man notwendig risikobehaftete Entscheidungen
unter begrenzter Kenntnis der Umstände und möglichen Konsequenzen
(Stichwort z.B. Marktwirtschaft).
Beim Programmieren (wie bei jedem Handwerk) sollte das nicht gelten.
Public Function GetFileDateCounter(ByVal folder As String, _
     Optional ByVal Searchpattern As String = "*.*") As List(Of String)
 
     Dim FileDateCounter As _
        New Collections.Generic.SortedDictionary(Of Date, Integer)
 
     With FileDateCounter
 
        For Each fi As IO.FileInfo In _
           New IO.DirectoryInfo(folder).GetFiles(Searchpattern)
 
           Dim dt As Date = fi.CreationTime.Date()
           If .ContainsKey(dt) Then
              .Item(dt) += 1
           Else
              .Add(dt, 1)
           End If
        Next fi
 
     End With
 
     Dim fdc As New List(Of String)
     For Each item As KeyValuePair(Of Date, Integer) In FileDateCounter
        fdc.Add(Format(item.Key, "dd.MM.yyyy") & " - " & item.Value)
     Next item
 
     Return fdc
End Function


Beitrag wurde zuletzt am 03.09.17 um 13:07:16 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Dateien von bestimmten Tag einlesen 
Autor: Franki
Datum: 04.09.17 03:34

Hallo,
Zitat:


Leider war der Ansatz jetzt auch nur zur hälfte durchgedacht.
Da das Datum wohl nur in den seltensten Fällen bekannt ist.


Also wenn du mit Datum arbeiten willst muss das Datum schon bekannt sein.

Zitat:


Es würde mehr Sinn machen nachdem der Ordner ausgewählt ist,
die Daten in in einer Combobox dazustellen.
3.9.2017 34 Dateien
2.9.2017 2 Dateien


Was für einen Sinn soll das denn haben Dateien einem Datumsbereich zuordnen zu wollen wenn das Datum der Datei nicht bekannt ist. Das kann doch nur schief gehen...

Ok, das physische Datum einer Datei in Windows kannst du zwar ermitteln, aber ist es das was du möchtest? Das widerspricht deiner Aussage, dass das Datum wohl nur in den seltensten Fällen bekannt ist. Du solltest vielleicht eine DB verwenden und von dort die Daten anhand anderer Kriterien auslesen...

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

Re: Dateien von bestimmten Tag einlesen 
Autor: 00tommy
Datum: 05.09.17 20:06

Hallo,

das Beispiel von Manfred ist super, und zu 100 % das was ich mir vorgestellt habe.
Arbeitet schnell und ohne Fehler.

Ich würde jetzt gerne die in der Combobox ausgewählten Dateien in einen Ordner Verschieben.
Hier mal mein Beispiel:
Public Class Form1
 
 
    Private Sub StartVZbutton_Click(sender As Object, e As EventArgs) Handles _
      StartVZbutton.Click
        If Start.ShowDialog() = DialogResult.OK Then
            StartVZ.Text = Start.SelectedPath
        End If
        cbo.DataSource = GetFileDateCounter(StartVZ.Text)
    End Sub
 
    Private Sub ZielVZbutton_Click(sender As Object, e As EventArgs) Handles _
      ZielVZbutton.Click
        If Ziel.ShowDialog() = DialogResult.OK Then
            ZielVZ.Text = Start.SelectedPath
        End If
    End Sub
 
    Public Function GetFileDateCounter(ByVal folder As String, Optional ByVal _
      Searchpattern As String = "*.txt") As List(Of String)
 
        Dim FileDateCounter As New Collections.Generic.SortedDictionary(Of _
          Date, Integer)
 
        With FileDateCounter
 
            For Each fi As IO.FileInfo In New IO.DirectoryInfo(folder).GetFiles( _
              Searchpattern)
 
                Dim dt As Date = fi.CreationTime.Date()
                If .ContainsKey(dt) Then
                    .Item(dt) += 1
                Else
                    .Add(dt, 1)
                End If
            Next fi
 
        End With
 
        Dim fdc As New List(Of String)
        For Each item As KeyValuePair(Of Date, Integer) In FileDateCounter
            fdc.Add(Format(item.Key, "ddd dd.MM.yy") & " - " & item.Value & "" & _
              "Dateien")
 
        Next item
 
        Return fdc
 
 
 
    End Function
 
 
 
    Private Sub Button4_Click(sender As Object, e As EventArgs) Handles _
      Clear.Click
        StartVZ.Text = ""
        ZielVZ.Text = ""
 
    End Sub
 
Private Sub Go_Click(sender As Object, e As EventArgs) Handles Go.Click
 
    End Sub
 
 
End Class
Wie kann ich das verschieben der Auswahl auslösen ?

Beitrag wurde zuletzt am 05.09.17 um 20:07:21 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Dateien mit einem bestimmten Erstelldatum verschieben 
Autor: Manfred X
Datum: 06.09.17 09:12

Hallo!

Unter Verwendung der bereits geposteten Routinen und Nutzung der "Io.File.Move"-Methode
sollte das Verschieben der Dateien eines bestimmten Erstelldatums eigentlich kein Problem
sein.


Public Class frmFileMove
 
    Dim fbd As New FolderBrowserDialog
 
    Dim WithEvents btnSourceFolder As New Button With _
        {.Parent = Me, .Text = "Quell-Ordner", .Width = 200}
 
    Dim cboFileDateFrequencies As New ComboBox With _
        {.Parent = Me, .Top = 50, .Width = 200}
 
    Dim WithEvents btnDestinationFolder As New Button With _
        {.Parent = Me, .Text = "Ziel-Ordner", _
         .Width = 200, .Top = 100, .Enabled = False}
 
    Dim WithEvents btnMove As New Button With _
        {.Parent = Me, .Text = "Verschieben", _
         .Top = 150, .Width = 200, .Enabled = False}
 
 
    Private Sub btnSourceFolder_Click(sender As Object, _
                       e As System.EventArgs) Handles btnSourceFolder.Click
 
        fbd.Description = "Quell-Ordner für Datei-Verschiebung"
        If fbd.ShowDialog = Windows.Forms.DialogResult.Cancel Then Exit Sub
 
        'Verteilung des Erstelldatums im Quellordner ermitteln
        cboFileDateFrequencies.DataSource = _
               GetFileDateCounter(fbd.SelectedPath)
 
        btnDestinationFolder.Enabled = cboFileDateFrequencies.Items.Count > 0
        btnSourceFolder.Tag = fbd.SelectedPath
        btnMove.Enabled = False
 
    End Sub
 
 
    Private Sub btnDestinationFolder_Click(sender As Object, _
                      e As System.EventArgs) Handles btnDestinationFolder.Click
 
        If cboFileDateFrequencies.SelectedItem Is Nothing Then Exit Sub
 
        fbd.Description = "Ziel-Ordner für Datei-Verschiebung"
        If fbd.ShowDialog = Windows.Forms.DialogResult.Cancel Then Exit Sub
 
        If fbd.SelectedPath.ToLower = _
            btnSourceFolder.Tag.ToString.ToLower Then Exit Sub
 
        btnDestinationFolder.Tag = fbd.SelectedPath
        btnMove.Enabled = true
    End Sub
 
 
    Private Sub btnMove_Click(sender As Object, _
                 e As System.EventArgs) Handles btnMove.Click
 
        Dim c As Integer = MoveFilesByDate(btnSourceFolder.Tag.ToString, _
                                           btnDestinationFolder.Tag.ToString, _
             CDate(cboFileDateFrequencies.SelectedItem.ToString.Split("-"c)(0)))
        If c > 0 Then
            MsgBox(c.ToString & " Dateien sind verschoben worden")
        Else
            MsgBox("Fehler beim Verschieben")
        End If
    End Sub
 
 
    Private Function MoveFilesByDate(source As String, destination As String, _
                                 criticaldate As Date) As Integer
        Try
            'Ermittlung der Dateien mit dem gewählten Erstelldatum  
            Dim fl As List(Of String) = GetFilesByDate(source, criticaldate)
 
            'Dateien verschieben
            For i As Integer = 0 To fl.Count - 1
                Dim fn As String = fl(i)
                IO.File.Move(IO.Path.Combine(source, fn), _
                             IO.Path.Combine(destination, fn))
            Next i
            Return fl.Count
        Catch ex As Exception
            Return -1
        End Try
    End Function
End Class


Beitrag wurde zuletzt am 06.09.17 um 09:30:13 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Dateien von bestimmten Tag einlesen 
Autor: Michele
Datum: 06.09.17 19:56

Hi Community,

extra wegen diesen Treads registriert. Finde die Fuction GetFileDateCounter sehr gut.
Suche einen Weg das ganze nach Monat einzuteilen.
Kann noch jemand ein Beispiele aufzeigen wie das ganze nach Monaten aufgeteilt werden kann ?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Häufigkeitsverteilung des Datei-Erstellungsdatums (nach Monaten) 
Autor: Manfred X
Datum: 06.09.17 20:34

Hallo!
Willkommen!

Die Klassifikation der Häufigkeiten nach Monaten geht
im Prinzip genauso wie Einteilung nach bei Tagen.
Will man nach Tagen einteilen, setzt man die Uhrzeit im
Erstellungs-Datetime der Files jeweils auf 00:00:00 Uhr
(Das erledigt die Date-Methode).
Will man nach Monaten einteilen, setzt man entsprechend
das Datum auf den ersten Tag des jeweiligen Monats.
Public Function GetFileMonthCounter(ByVal folder As String, _
     Optional ByVal Searchpattern As String = "*.*") As List(Of String)
 
   Dim FileMonthCounter As _
            New Collections.Generic.SortedDictionary(Of Date, Integer)
 
   With FileMonthCounter
 
      For Each fi As IO.FileInfo In _
         New IO.DirectoryInfo(folder).GetFiles(Searchpattern)
 
         'Das Erstellungsdatum auf den ersten Tag des Monats setzen
         Dim dt As New Date(fi.CreationTime.Year, fi.CreationTime.Month, 1)
         If .ContainsKey(dt) Then
            .Item(dt) += 1
         Else
            .Add(dt, 1)
         End If
      Next fi
 
   End With
 
   Dim fdc As New List(Of String), freq As String, dtf as string
 
   For Each item As KeyValuePair(Of Date, Integer) In FileMonthCounter
      dtf = Format(item.Key, "Y")
      freq = item.Value.ToString
      freq = New String(" "c, (4 - freq.Length) * 2) & freq
      fdc.Add(freq & " - " & dtf)
   Next item
 
   Return fdc
End Function
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Dateien von bestimmten Tag einlesen 
Autor: Michele
Datum: 07.09.17 05:56

Moin,

sprich bei der Verwendung von GefFileMonthCounter muss auch noch die GetFilesByDate angepasst werden ?
Hier werden ja nur die Tage abgefragt
lbo.DataSource = GetFilesByDate("C:\daten", CDate("20.04.2016"))
Oder reicht es hier das Monat reinzubekommen ?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Dateien verschieben, deren Erstelldatum in einem bestimmten Monat liegt 
Autor: Manfred X
Datum: 07.09.17 07:12

Hallo!

Du hattest nach "GetFileDateCounter" gefragt.

Wenn es um das Verschieben der Dateien eines Monats geht,
kann man wie folgt vorgehen:
Public Class frmFileMoveMonth
 
    Dim fbd As New FolderBrowserDialog
 
    Dim WithEvents btnSourceFolder As New Button With _
        {.Parent = Me, .Text = "Quell-Ordner", .Width = 200}
 
    Dim cboFileDateFrequencies As New ComboBox With _
        {.Parent = Me, .Top = 50, .Width = 200}
 
    Dim WithEvents btnDestinationFolder As New Button With _
        {.Parent = Me, .Text = "Ziel-Ordner", _
            .Width = 200, .Top = 100, .Enabled = False}
 
    Dim WithEvents btnMove As New Button With _
        {.Parent = Me, .Text = "Verschieben", _
            .Top = 150, .Width = 200, .Enabled = False}
 
    Dim MonthNames As New List(Of String)
 
 
    Private Sub frmFileMove_Load(sender As System.Object, _
                                 e As System.EventArgs) Handles MyBase.Load
        MonthNames.Add(" ")
        For i As Integer = 1 To 12
            'Monatsnamen für Rückverzeigerung auflisten
            MonthNames.Add(MonthName(i, False))
        Next i
    End Sub
 
 
    Private Sub btnSourceFolder_Click(sender As Object, _
                   e As System.EventArgs) Handles btnSourceFolder.Click
 
        fbd.Description = "Quell-Ordner für Datei-Verschiebung"
        If fbd.ShowDialog = Windows.Forms.DialogResult.Cancel Then Exit Sub
 
        cboFileDateFrequencies.DataSource = _
            FileSystemStuff.GetFileMonthCounter(fbd.SelectedPath)
 
        btnDestinationFolder.Enabled = cboFileDateFrequencies.Items.Count > 0
        btnSourceFolder.Tag = fbd.SelectedPath
        btnMove.Enabled = False
 
    End Sub
 
 
    Private Sub btnDestinationFolder_Click(sender As Object, _
                      e As System.EventArgs) Handles btnDestinationFolder.Click
 
        If cboFileDateFrequencies.SelectedItem Is Nothing Then Exit Sub
 
        fbd.Description = "Ziel-Ordner für Datei-Verschiebung"
        If fbd.ShowDialog = Windows.Forms.DialogResult.Cancel Then Exit Sub
 
        If fbd.SelectedPath.ToLower = _
            btnSourceFolder.Tag.ToString.ToLower Then Exit Sub
 
        btnDestinationFolder.Tag = fbd.SelectedPath
        btnMove.Enabled = cboFileDateFrequencies.SelectedItem IsNot Nothing
    End Sub
 
 
    Private Sub btnMove_Click(sender As Object, _
                   e As System.EventArgs) Handles btnMove.Click
 
        Dim parts() As String = _
             cboFileDateFrequencies.SelectedItem.ToString.Split("-"c)
        Dim m As Integer = _
             MonthNames.IndexOf(parts(1).Trim.Split(" "c)(0).Trim)
        Dim y As Integer = CInt(parts(1).Trim.Split(" "c)(1))
 
        Dim c As Integer = MoveFilesByMonth _
                                  (btnSourceFolder.Tag.ToString, _
                                   btnDestinationFolder.Tag.ToString, m, y)
 
        If c > 0 Then
            MsgBox(c.ToString & " Dateien sind verschoben worden")
        Else
            MsgBox("Fehler beim Verschieben")
        End If
    End Sub
 
 
    Private Function MoveFilesByMonth _
                     (source As String, destination As String, _
                      criticalMonth As Integer, criticalYear As Integer) As _
                      Integer
        Try
            Dim fl As List(Of String) = _
                GetFilesByMonth(source, criticalMonth, criticalYear)
 
            For i As Integer = 0 To fl.Count - 1
                Dim fn As String = fl(i) '.Split("-"c)(1).Trim
                IO.File.Move(IO.Path.Combine(source, fn), _
                                IO.Path.Combine(destination, fn))
            Next i
            Return fl.Count
        Catch ex As Exception
            Return -1
        End Try
    End Function
 
 
    Public Function GetFilesByMonth(ByVal folder As String, _
       ByVal criticalMonth As Integer, criticalYear As Integer) As List(Of _
       String)
 
        Dim filenames As New List(Of String)
 
        For Each fi As IO.FileInfo In New IO.DirectoryInfo(folder).GetFiles
            If fi.CreationTime.Year = criticalyear AndAlso _
                fi.CreationTime.Month = criticalMonth Then
                filenames.Add(fi.Name)
            End If
        Next fi
 
        Return filenames
    End Function
End Class


Beitrag wurde zuletzt am 07.09.17 um 07:29:35 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Dateien von bestimmten Tag einlesen 
Autor: Michele
Datum: 08.09.17 20:41

Bekomme die Meldung

FileSystemStuff" wurde nicht deklariert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Dateien von bestimmten Tag einlesen 
Autor: Michele
Datum: 09.09.17 09:15

OK, jetzt funktioniert es.

Danke für die Hilfestellung
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Dateien von bestimmten Tag einlesen 
Autor: Manfred X
Datum: 09.09.17 11:10

Erklärung:

Bei mir steht die Routine "GetFileMonthCounter" als öffentliche Methode
in der Klasse "Filesystemstuff" und ist deshalb im Aufruf entsprechend
qualifiziert. Ich habe vergessen diese Qualifizierung zu entfernen.
Wenn man diese Routine direkt in das Formular kopiert, kommt es
zu der bei Dir aufgetretenen Ausnahme.

Beitrag wurde zuletzt am 09.09.17 um 11:12:23 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