| |
VB.NET - Ein- und UmsteigerDateien 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 | |
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. | |
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 .. | |
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 | |
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 schlussfolgern.
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. | |
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. | |
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 | |
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. | |
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. | |
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 ? | |
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 | |
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 ? | |
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. | |
Re: Dateien von bestimmten Tag einlesen | | | Autor: Michele | Datum: 08.09.17 20:41 |
| Bekomme die Meldung
FileSystemStuff" wurde nicht deklariert. | |
Re: Dateien von bestimmten Tag einlesen | | | Autor: Michele | Datum: 09.09.17 09:15 |
| OK, jetzt funktioniert es.
Danke für die Hilfestellung | |
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. | |
| 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 |
|
|
sevISDN 1.0
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp 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
|