Probleme mit Rename Funktion in VB
- From: "Rolf Zawidski" <Rolf.Zawidski@xxxxxxxxxxx>
- Date: Thu, 7 Jun 2007 18:38:33 +0200
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
.
- Follow-Ups:
- Re: Probleme mit Rename Funktion in VB
- From: Stefan Falz
- Re: Probleme mit Rename Funktion in VB
- Prev by Date: Re: Probleme mit GZipStream (Byte() zu komprimiertes Byte() und zurück ergibt kein gleiches Ergebnis
- Next by Date: Re: Probleme mit Rename Funktion in VB
- Previous by thread: Probleme bei Deserialisieren im VB6
- Next by thread: Re: Probleme mit Rename Funktion in VB
- Index(es):
Relevant Pages
|
Loading