Hallo zusammen,
das war wohl ein Fehler meinerseits.
Public Class FileRenamer
#Region " Deklarationen - Felder "
Private pDifferExtensions As Boolean
Private pFiles As List(Of IO.FileInfo)
Private pPattern As String
Private pPatternVars As New Dictionary(Of String, PatternVarReplacer)
Private pStartValue As Integer
#End Region
#Region " Deklarationen - Delegates/Events "
Public Delegate Function PatternVarReplacer(ByVal file As IO.FileInfo, _
ByVal i As Integer) As String
#End Region
#Region " Konstruktoren "
Public Sub New(ByVal files As IEnumerable(Of IO.FileInfo))
Me.New(files, "?i", 1)
End Sub
Public Sub New(ByVal files As IEnumerable(Of IO.FileInfo), ByVal pattern As _
String)
Me.New(files, pattern, 1)
End Sub
Public Sub New(ByVal files As IEnumerable(Of IO.FileInfo), ByVal pattern _
As String, _
ByVal startValue As Integer)
pFiles = New List(Of IO.FileInfo)
pFiles.AddRange(files)
pPattern = pattern
pStartValue = startValue
pPatternVars.Add("?i", AddressOf GetCounter)
End Sub
#End Region
#Region " Eigenschaften "
Public Property DifferExtensions() As Boolean
Get
Return pDifferExtensions
End Get
Set(ByVal value As Boolean)
pDifferExtensions = value
End Set
End Property
Public ReadOnly Property Files() As List(Of IO.FileInfo)
Get
Return pFiles
End Get
End Property
Default Public ReadOnly Property Name(ByVal index As Integer) As String
Get
Return pFiles(index).Name
End Get
End Property
Public Property Pattern() As String
Get
Return pPattern
End Get
Set(ByVal value As String)
pPattern = value
End Set
End Property
Public ReadOnly Property PatternVariables() As Dictionary(Of String, _
PatternVarReplacer)
Get
Return pPatternVars
End Get
End Property
Public Property StartValue() As Integer
Get
Return pStartValue
End Get
Set(ByVal value As Integer)
pStartValue = value
End Set
End Property
#End Region
#Region " Methoden - Function "
Private Function GetCounter(ByVal file As IO.FileInfo, ByVal i As Integer) _
As String
Return i.ToString("0000")
End Function
Private Function GetFileName(ByVal file As IO.FileInfo, ByVal counter As _
Integer) As String
Dim name As String = Pattern
' Iteriere durch jede Variable
For Each var In pPatternVars
' Delegaten dynamisch aufrufen und entsprechende Zeichenkette
' ersetzen
name = name.Replace(var.Key, CStr(var.Value.DynamicInvoke(file, _
counter)))
Next
Return name & file.Extension
End Function
#End Region
#Region " Methoden - Sub "
Public Sub Rename()
Dim counter As New Dictionary(Of String, Integer)
Dim extension As String
Dim newPath As String
Dim newName As String
Try
' Iteriere durch jede Datei
For Each file In Files
' Die Dateierweiterung für die Nummerierung
extension = If(DifferExtensions, file.Extension, "*")
' Falls Dateierweiterung noch nicht enthalten, füge diese dem
' Dictionary hinzu
If Not counter.ContainsKey(extension) Then
counter.Add(extension, StartValue)
End If
' Ermittle den neuen Dateipfad und Dateiname
newPath = IO.Path.GetDirectoryName(file.FullName)
newName = GetFileName(file, counter(extension))
' Falls neue Datei nicht existiert, dann benenne diese um
If Not IO.File.Exists(IO.Path.Combine(newPath, newName)) Then
file.MoveTo(IO.Path.Combine(newPath, newName))
End If
' Zähler für Nummerierung um 1 erhöhen
counter(extension) += 1
Next
Catch ex As Exception
' Eventuelle Fehler abfangen
Debug.WriteLine(ex.Message)
End Try
End Sub
#End RegionKönnt Ihr damit was anfangen?!
Grüße
Stefan |