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