Probleme mit Rename Funktion in VB



Hallo allerseits,

ich bin Hobbyprogrmmierer und arbeiten unter VISTA mit Visual Studio 2005 (SP1) in Visual Basic.

Bei der Realiserung eines kleinen Projektes bin ich auf ein hartnäckiges Problem in der Function Rename(OldPath,Newpath) gestoßen und weiss mir nicht mehr zu helfen.

Ich arbeite in einem Treeview Control und einem Listview Control, in welchen ich mir Verzeichnisstruktur (Node = Ordnername) und Listview = SelectedItem) Dateinamen anzeigen lasse.

Wenn ich die Ordnernamen und eine Reihe von Dateinamen als Text im Editor eintippe, dann funktioniert Rename. Wenn ich die Angaben aber als String von den entsprechden Funktionen einsetze, erhalte ich im Try catch Block entweder
ex = ArgumentException oder
ex = IOException
und es wird ein Teil der Dateien umbenannt, ein anderer nicht.

Es wäre nett, wenn mir jemand helfen kann :). vielen Dank im voraus .



Vielleicht sind die Texte anders encoded, der Inhalt ist jedenfalls gleich.
Ich habe es auch mit anderen Funktionen versucht
z. B. My.Computer.FileSystem.RenameFile macht hier den gleichen Mist.
CopyFile und MoveFile funktioniert problemlos.

Den Ordner hole ich mir mit folgender Funktion und es ergibt sich auch der gewünschte Text :
z. B. "C:\Downloads"

Public AktuellerKnoten As TreeNode

''' <summary>Ermittelt aus dem aktuellen Treenode den Ordner ohne \ am Ende</summary>
''' <returns>Ordner ohne \ am Ende oder ""</returns>
Public Function GetOrdner() As String

Try
Dim Ordner As String = CStr(AktuellerKnoten.FullPath)
Ordner = Ordner.Replace("\\", "\") 'evtl. c:\\ --> c:\
Return Ordner

Catch ex As Exception
Return ""
End Try

End Function

Die selektierten Dateien in diesem Ordner ermittle ich mit folgender Funktion :
Die Textanzeige ist ebenfalls die gewünschte z.B. "A.jpg","B.jpg" usw.

Public Function GetSelectedItems(ByVal C As ListView) As String()

Try
If C.SelectedItems.Count = 0 Then Return Nothing
C.Cursor = Cursors.WaitCursor

Dim Data(C.SelectedItems.Count - 1) As String
Dim Count As Integer = 0
For Each item As ListViewItem In C.SelectedItems
Data(Count) = item.Text
Count += 1
Next
C.Cursor = Cursors.Default
Return Data

Catch ex As Exception
C.Cursor = Cursors.Default
Return Nothing
End Try

End Function



Meine Rename Funktion sieht folgendermaßen aus :


''' <summary>Benennt alle Dateien des Arrays Files() im genannten Ordner so um, dass
''' zu einem Stammnamen ab einem bestimmten Startwert die Dateien mit
''' fortlaufenden Nummern versehen werden. </summary>
''' <param name="Ordner"> Ordner (ohne \ am Ende), in dem sich die Dateien befinden</param>
''' <param name="Files"> Feld mit Dateinamen mit Ext aber ohne Laufwerk und Ordner</param>
''' <param name="Stammname"> Neuer Dateiname ohne Zahlen</param>
''' <param name="StartValue"> gewünschter Startwert</param>
''' <param name="Prog"> Der Name einer Fortschrittsbalkens</param>
''' <returns>Die Anzahl der umbenannten Dateien</returns>
''' <remarks></remarks>
Public Function RenameFiles(ByVal Ordner As String, ByVal Files() As String, _
ByVal Stammname As String, Optional ByVal StartValue As Integer = 1, _
Optional ByVal Prog As Windows.Forms.ToolStripProgressBar = Nothing) As Integer

Dim CountSTring As String = ""
Dim PercentCount As Integer = 0 'Zählt die umbenannten Dateien für Prog
Dim Di As New DirectoryInfo(Ordner)
If Di.Exists() Then
My.Computer.FileSystem.CurrentDirectory = Ordner
Else
MsgBox("Ordner " & Ordner & " existiert nicht")
Return 0
End If

Try

Dim Anzahl As Integer = Files.GetUpperBound(0)
Dim MaxLen As Integer = CInt(Len(CStr(Anzahl)))
Dim Extension As String = ""

For i As Integer = 0 To Anzahl

'Erstelle den alten Dateinamen und ermittle die Extension
Dim OldFile As String = Ordner & "\" & Files(i)
Dim Old_FI As New FileInfo(OldFile)
If Old_FI.Exists() Then
Extension = Old_FI.Extension
Call File.SetAttributes(OldFile, FileAttributes.Normal)

CountSTring = Datei.MakeFileCountString(StartValue, MaxLen)
Dim NewFile As String = Ordner & "\" & Stammname & CountSTring & Extension
Dim New_FI As New FileInfo(NewFile)
If New_FI.Exists = False Then

Try
Call Rename(OldFile, NewFile)
Catch ex As ArgumentException
MsgBox("ArgumentException")
Catch ex As FileNotFoundException
MsgBox("Datei nicht gefunden")
Catch ex As IOException
MsgBox("IOException")
End Try

If Not IsNothing(Prog) Then 'Fortschritt anzeigen
PercentCount += 1
Call General.ShowProgressUp(PercentCount, Anzahl, Prog)
End If

StartValue += 1
End If
End If

Next i
Return PercentCount

Catch ex As Exception
Fehler.Proc = "RenameFiles"
Fehler.Info = ex.Message
Call Fehler.Show()
End Try
Return PercentCount

End Function


Die Hilfsfunktion zumn Hochzählen der StartWerte lautet :

''' <summary> Produziert eine Zeichenkette mit führenden Nullen.
''' Die Anzahl der führenden Nullen wird durch MaxLen definiert.
''' Der Countstring wird zum Schluß in runde Klammern gefaßt.
''' Beispiel : Count = 1 und MaxLen = 3 liefert "(001)".</summary>
''' <param name="Count"> beleibige Zahl</param>
''' <param name="MaxLen"> maximale Stellenanzahl</param>
''' <returns> Den gesuchten String</returns>
Public Function MakeFileCountString(ByVal Count As Integer, ByVal MaxLen As Integer) As String

Dim CountString As String = ""
CountString = CStr(Count)
Do While Len(CountString) < MaxLen
CountString = "0" & CountString
Loop
CountString = "(" & CountString & ")"
Return CountString

End Function



.



Relevant Pages


Loading