'Sonderzeichen aus Ordnernamen oder Dateinamen entfernen .

  • VB.NET
  • .NET (FX) 4.0

Es gibt 33 Antworten in diesem Thema. Der letzte Beitrag () ist von TVX.

    'Sonderzeichen aus Ordnernamen oder Dateinamen entfernen .

    Hallo miteinander . ^^

    Folgende Frage :
    Ich wollte mir ein kleines Tool machen um Sonderzeichen aus Ordnernamen - oder - Dateinamen zu entfernen .
    So weit bin ich bisher und wollte mal fragen ob ich's so oder besser anders machen sollte :/

    Muss den Code leider in schwarz abbilden - da er durch eine fehlerhafte Darstellung 2/3 in rot zeigen würde :(
    Hab ihn etwas gestreckt für bessere Übersicht :/

    Lg ^^

    Spoiler anzeigen

    Quellcode

    1. 'Sonderzeichen aus Ordnernamen oder Dateinamen entfernen .
    2. Option Strict On
    3. Public Class Form1
    4. 'Speicherdatei für Eingabeboxen
    5. Dim Configuration_Save_Pfad As String = "Sonderzeichen_Cleaner_Configuration_Save.txt"
    6. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    7. 'Form immer im Fordergrund
    8. TopMost = True
    9. 'Prüfen ob Datei schon Exsistiert
    10. If System.IO.File.Exists(Configuration_Save_Pfad) Then
    11. 'Wenn ja gespeicherte Zeile lesen und in die passenden TextBoxen schreiben
    12. Using sr As New IO.StreamReader(Configuration_Save_Pfad)
    13. Verbotene_Sonderzeichen_für_Ordnernamen_TextBox.Text = sr.ReadLine()
    14. Sonderzeichenersatz_für_Ordnernamen_TextBox.Text = sr.ReadLine()
    15. Verbotene_Sonderzeichen_für_Dateinamen_TextBox.Text = sr.ReadLine()
    16. Sonderzeichenersatz_für_Dateinamen_TextBox.Text = sr.ReadLine()
    17. sr.Close()
    18. End Using
    19. End If
    20. End Sub
    21. Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
    22. 'TextBoxen beim schliessen der Form in Datei speichern
    23. Using sw As New IO.StreamWriter(Configuration_Save_Pfad)
    24. sw.WriteLine(Verbotene_Sonderzeichen_für_Ordnernamen_TextBox.Text)
    25. sw.WriteLine(Sonderzeichenersatz_für_Ordnernamen_TextBox.Text)
    26. sw.WriteLine(Verbotene_Sonderzeichen_für_Dateinamen_TextBox.Text)
    27. sw.WriteLine(Sonderzeichenersatz_für_Dateinamen_TextBox.Text)
    28. sw.Close()
    29. End Using
    30. End Sub
    31. 'Sonderzeichen aus Ordnernamen entfernen
    32. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    33. 'Button Sound
    34. My.Computer.Audio.Play(My.Resources.button, AudioPlayMode.Background)
    35. 'Prüfen ob benötigte Eingabeboxen nicht leer sind
    36. If Verbotene_Sonderzeichen_für_Ordnernamen_TextBox.Text = "" Or Sonderzeichenersatz_für_Ordnernamen_TextBox.Text = "" Then
    37. MsgBox("Die Felder - ( Verbotene Zeichen - oder - Ersetzen mit ) - sind nicht richtig ausgefüllt !", MsgBoxStyle.Critical)
    38. Else
    39. 'Wenn nicht leer = OrdnerBrowser Go
    40. If FolderBrowserDialog1.ShowDialog() = DialogResult.OK Then
    41. 'Button Text ändern
    42. Button1.Text = "Bitte warten..."
    43. 'Alle Ordner in Pfad durchlaufen
    44. For Each Ordner In My.Computer.FileSystem.GetDirectories(FolderBrowserDialog1.SelectedPath)
    45. Try 'Ordnername aus Pfad extrahieren
    46. Dim Ordnername As String = Ordner.Substring(Ordner.LastIndexOf("\") + 1)
    47. 'Prüfen ob der Ordnername verbotene Zeichen enthällt
    48. If System.Text.RegularExpressions.Regex.IsMatch(Ordnername, "[" & Verbotene_Sonderzeichen_für_Ordnernamen_TextBox.Text & "]") Then
    49. 'Wenn ja - Function Clean_Ordnername - aufrufen, Sonderzeichen entfernen und Ordner mit Renam umbenennen
    50. My.Computer.FileSystem.RenameDirectory(Ordner, Clean_Ordnername(Ordnername, Verbotene_Sonderzeichen_für_Ordnernamen_TextBox.Text, Sonderzeichenersatz_für_Ordnernamen_TextBox.Text))
    51. End If
    52. Catch ex As Exception 'Fehler Ausgabe
    53. MsgBox(ex.Message.ToString)
    54. End Try
    55. Next
    56. 'Wenn fertig : Button Text ändern auf ausgangs Text + Binnnngggg
    57. Button1.Text = "Alle Ordnernamen in einem Ordner säubern"
    58. My.Computer.Audio.Play(My.Resources.bell, AudioPlayMode.Background)
    59. End If
    60. End If
    61. End Sub
    62. 'Sonderzeichen aus Dateinamen entfernen
    63. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    64. 'Button Sound
    65. My.Computer.Audio.Play(My.Resources.button, AudioPlayMode.Background)
    66. 'Prüfen ob benötigte Eingabeboxen nicht leer sind
    67. If Verbotene_Sonderzeichen_für_Dateinamen_TextBox.Text = "" Or Sonderzeichenersatz_für_Dateinamen_TextBox.Text = "" Then
    68. MsgBox("Die Felder - ( Verbotene Zeichen - oder - Ersetzen mit ) - sind nicht richtig ausgefüllt !", MsgBoxStyle.Critical)
    69. Else
    70. 'Wenn nicht leer = OrdnerBrowser Go
    71. If FolderBrowserDialog1.ShowDialog() = DialogResult.OK Then
    72. 'Button Text ändern
    73. Button2.Text = "Bitte warten..."
    74. 'Alle Dateien in Pfad durchlaufen
    75. For Each Dateien In My.Computer.FileSystem.GetFiles(FolderBrowserDialog1.SelectedPath)
    76. Try
    77. 'Dateiname aus Pfad extrahieren
    78. Dim Dateiname As String = IO.Path.GetFileName(Dateien)
    79. 'Prüfen ob der Dateiname verbotene Zeichen enthällt
    80. If System.Text.RegularExpressions.Regex.IsMatch(Dateiname, "[" & Verbotene_Sonderzeichen_für_Dateinamen_TextBox.Text & "]") Then
    81. 'Wenn ja - Function Clean_Dateiname - aufrufen, Sonderzeichen entfernen und Datei mit Renam umbenennen
    82. My.Computer.FileSystem.RenameFile(Dateien, Clean_Dateiname(Dateiname, Verbotene_Sonderzeichen_für_Dateinamen_TextBox.Text, Sonderzeichenersatz_für_Dateinamen_TextBox.Text))
    83. End If
    84. Catch ex As Exception 'Fehler Ausgabe
    85. MsgBox(ex.Message.ToString)
    86. End Try
    87. Next
    88. 'Wenn fertig : Button Text ändern auf ausgangs Text + Binnnngggg
    89. Button2.Text = "Alle Dateinamen in einem Ordner säubern"
    90. My.Computer.Audio.Play(My.Resources.bell, AudioPlayMode.Background)
    91. End If
    92. End If
    93. End Sub
    94. 'Sonderzeichen aus Ordnernamen entfernen Function
    95. Public Function Clean_Ordnername(ByVal Dateiname As String, ByVal Verbotene_Zeichen As String, ByVal Ersatzzeichen As String) As String
    96. Dim s As String = ""
    97. If CheckBox2.Checked = False Then
    98. 'Mehrere Sonderzeichen hintereinander = einen ersatzzeichen !
    99. s = System.Text.RegularExpressions.Regex.Replace(Dateiname, "[" & Verbotene_Zeichen & "]", Ersatzzeichen)
    100. Else
    101. 'Mehrere Sonderzeichen hintereinander = mehrere ersatzzeichen !
    102. s = System.Text.RegularExpressions.Regex.Replace(Dateiname, "[" & Verbotene_Zeichen & "]+", Ersatzzeichen)
    103. End If
    104. Return s
    105. End Function
    106. 'Sonderzeichen aus Dateinamen entfernen Function
    107. Public Function Clean_Dateiname(ByVal Dateiname As String, ByVal Verbotene_Zeichen As String, ByVal Ersatzzeichen As String) As String
    108. Dim s As String = ""
    109. If CheckBox2.Checked = False Then
    110. 'Mehrere Sonderzeichen hintereinander = einen ersatzzeichen !
    111. s = System.Text.RegularExpressions.Regex.Replace(Dateiname, "[" & Verbotene_Zeichen & "]", Ersatzzeichen)
    112. Else
    113. 'Mehrere Sonderzeichen hintereinander = mehrere ersatzzeichen !
    114. s = System.Text.RegularExpressions.Regex.Replace(Dateiname, "[" & Verbotene_Zeichen & "]+", Ersatzzeichen)
    115. End If
    116. Return s
    117. End Function
    118. 'Eingabeboxen leeren
    119. Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    120. My.Computer.Audio.Play(My.Resources.button, AudioPlayMode.Background)
    121. Verbotene_Sonderzeichen_für_Ordnernamen_TextBox.Clear()
    122. Sonderzeichenersatz_für_Ordnernamen_TextBox.Clear()
    123. End Sub
    124. 'Eingabeboxen leeren
    125. Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
    126. My.Computer.Audio.Play(My.Resources.button, AudioPlayMode.Background)
    127. Verbotene_Sonderzeichen_für_Dateinamen_TextBox.Clear()
    128. Sonderzeichenersatz_für_Dateinamen_TextBox.Clear()
    129. End Sub
    130. 'Sound CheckBox1
    131. Private Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox1.CheckedChanged
    132. My.Computer.Audio.Play(My.Resources.button, AudioPlayMode.Background)
    133. End Sub
    134. 'Sound CheckBox2
    135. Private Sub CheckBox2_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox2.CheckedChanged
    136. My.Computer.Audio.Play(My.Resources.button, AudioPlayMode.Background)
    137. End Sub
    138. End Class


    Und einmal in Farbe :(

    Spoiler anzeigen

    VB.NET-Quellcode

    1. 'Sonderzeichen aus Ordnernamen oder Dateinamen entfernen .
    2. Option Strict On
    3. Public Class Form1
    4. 'Speicherdatei für Eingabeboxen
    5. Dim Configuration_Save_Pfad As String = "Sonderzeichen_Cleaner_Configuration_Save.txt"
    6. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    7. 'Form immer im Fordergrund
    8. TopMost = True
    9. 'Prüfen ob Datei schon Exsistiert
    10. If System.IO.File.Exists(Configuration_Save_Pfad) Then
    11. 'Wenn ja gespeicherte Zeile lesen und in die passenden TextBoxen schreiben
    12. Using sr As New IO.StreamReader(Configuration_Save_Pfad)
    13. Verbotene_Sonderzeichen_für_Ordnernamen_TextBox.Text = sr.ReadLine()
    14. Sonderzeichenersatz_für_Ordnernamen_TextBox.Text = sr.ReadLine()
    15. Verbotene_Sonderzeichen_für_Dateinamen_TextBox.Text = sr.ReadLine()
    16. Sonderzeichenersatz_für_Dateinamen_TextBox.Text = sr.ReadLine()
    17. sr.Close()
    18. End Using
    19. End If
    20. End Sub
    21. Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
    22. 'TextBoxen beim schliessen der Form in Datei speichern
    23. Using sw As New IO.StreamWriter(Configuration_Save_Pfad)
    24. sw.WriteLine(Verbotene_Sonderzeichen_für_Ordnernamen_TextBox.Text)
    25. sw.WriteLine(Sonderzeichenersatz_für_Ordnernamen_TextBox.Text)
    26. sw.WriteLine(Verbotene_Sonderzeichen_für_Dateinamen_TextBox.Text)
    27. sw.WriteLine(Sonderzeichenersatz_für_Dateinamen_TextBox.Text)
    28. sw.Close()
    29. End Using
    30. End Sub
    31. 'Sonderzeichen aus Ordnernamen entfernen
    32. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    33. 'Button Sound
    34. My.Computer.Audio.Play(My.Resources.button, AudioPlayMode.Background)
    35. 'Prüfen ob benötigte Eingabeboxen nicht leer sind
    36. If Verbotene_Sonderzeichen_für_Ordnernamen_TextBox.Text = "" Or Sonderzeichenersatz_für_Ordnernamen_TextBox.Text = "" Then
    37. MsgBox("Die Felder - ( Verbotene Zeichen - oder - Ersetzen mit ) - sind nicht richtig ausgefüllt !", MsgBoxStyle.Critical)
    38. Else
    39. 'Wenn nicht leer = OrdnerBrowser Go
    40. If FolderBrowserDialog1.ShowDialog() = DialogResult.OK Then
    41. 'Button Text ändern
    42. Button1.Text = "Bitte warten..."
    43. 'Alle Ordner in Pfad durchlaufen
    44. For Each Ordner In My.Computer.FileSystem.GetDirectories(FolderBrowserDialog1.SelectedPath)
    45. Try 'Ordnername aus Pfad extrahieren
    46. Dim Ordnername As String = Ordner.Substring(Ordner.LastIndexOf("\") + 1)
    47. 'Prüfen ob der Ordnername verbotene Zeichen enthällt
    48. If System.Text.RegularExpressions.Regex.IsMatch(Ordnername, "[" & Verbotene_Sonderzeichen_für_Ordnernamen_TextBox.Text & "]") Then
    49. 'Wenn ja - Function Clean_Ordnername - aufrufen, Sonderzeichen entfernen und Ordner mit Renam umbenennen
    50. My.Computer.FileSystem.RenameDirectory(Ordner, Clean_Ordnername(Ordnername, Verbotene_Sonderzeichen_für_Ordnernamen_TextBox.Text, Sonderzeichenersatz_für_Ordnernamen_TextBox.Text))
    51. End If
    52. Catch ex As Exception 'Fehler Ausgabe
    53. MsgBox(ex.Message.ToString)
    54. End Try
    55. Next
    56. 'Wenn fertig : Button Text ändern auf ausgangs Text + Binnnngggg
    57. Button1.Text = "Alle Ordnernamen in einem Ordner säubern"
    58. My.Computer.Audio.Play(My.Resources.bell, AudioPlayMode.Background)
    59. End If
    60. End If
    61. End Sub
    62. 'Sonderzeichen aus Dateinamen entfernen
    63. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    64. 'Button Sound
    65. My.Computer.Audio.Play(My.Resources.button, AudioPlayMode.Background)
    66. 'Prüfen ob benötigte Eingabeboxen nicht leer sind
    67. If Verbotene_Sonderzeichen_für_Dateinamen_TextBox.Text = "" Or Sonderzeichenersatz_für_Dateinamen_TextBox.Text = "" Then
    68. MsgBox("Die Felder - ( Verbotene Zeichen - oder - Ersetzen mit ) - sind nicht richtig ausgefüllt !", MsgBoxStyle.Critical)
    69. Else
    70. 'Wenn nicht leer = OrdnerBrowser Go
    71. If FolderBrowserDialog1.ShowDialog() = DialogResult.OK Then
    72. 'Button Text ändern
    73. Button2.Text = "Bitte warten..."
    74. 'Alle Dateien in Pfad durchlaufen
    75. For Each Dateien In My.Computer.FileSystem.GetFiles(FolderBrowserDialog1.SelectedPath)
    76. Try
    77. 'Dateiname aus Pfad extrahieren
    78. Dim Dateiname As String = IO.Path.GetFileName(Dateien)
    79. 'Prüfen ob der Dateiname verbotene Zeichen enthällt
    80. If System.Text.RegularExpressions.Regex.IsMatch(Dateiname, "[" & Verbotene_Sonderzeichen_für_Dateinamen_TextBox.Text & "]") Then
    81. 'Wenn ja - Function Clean_Dateiname - aufrufen, Sonderzeichen entfernen und Datei mit Renam umbenennen
    82. My.Computer.FileSystem.RenameFile(Dateien, Clean_Dateiname(Dateiname, Verbotene_Sonderzeichen_für_Dateinamen_TextBox.Text, Sonderzeichenersatz_für_Dateinamen_TextBox.Text))
    83. End If
    84. Catch ex As Exception 'Fehler Ausgabe
    85. MsgBox(ex.Message.ToString)
    86. End Try
    87. Next
    88. 'Wenn fertig : Button Text ändern auf ausgangs Text + Binnnngggg
    89. Button2.Text = "Alle Dateinamen in einem Ordner säubern"
    90. My.Computer.Audio.Play(My.Resources.bell, AudioPlayMode.Background)
    91. End If
    92. End If
    93. End Sub
    94. 'Sonderzeichen aus Ordnernamen entfernen Function
    95. Public Function Clean_Ordnername(ByVal Dateiname As String, ByVal Verbotene_Zeichen As String, ByVal Ersatzzeichen As String) As String
    96. Dim s As String = ""
    97. If CheckBox2.Checked = False Then
    98. 'Mehrere Sonderzeichen hintereinander = einen ersatzzeichen !
    99. s = System.Text.RegularExpressions.Regex.Replace(Dateiname, "[" & Verbotene_Zeichen & "]", Ersatzzeichen)
    100. Else
    101. 'Mehrere Sonderzeichen hintereinander = mehrere ersatzzeichen !
    102. s = System.Text.RegularExpressions.Regex.Replace(Dateiname, "[" & Verbotene_Zeichen & "]+", Ersatzzeichen)
    103. End If
    104. Return s
    105. End Function
    106. 'Sonderzeichen aus Dateinamen entfernen Function
    107. Public Function Clean_Dateiname(ByVal Dateiname As String, ByVal Verbotene_Zeichen As String, ByVal Ersatzzeichen As String) As String
    108. Dim s As String = ""
    109. If CheckBox2.Checked = False Then
    110. 'Mehrere Sonderzeichen hintereinander = einen ersatzzeichen !
    111. s = System.Text.RegularExpressions.Regex.Replace(Dateiname, "[" & Verbotene_Zeichen & "]", Ersatzzeichen)
    112. Else
    113. 'Mehrere Sonderzeichen hintereinander = mehrere ersatzzeichen !
    114. s = System.Text.RegularExpressions.Regex.Replace(Dateiname, "[" & Verbotene_Zeichen & "]+", Ersatzzeichen)
    115. End If
    116. Return s
    117. End Function
    118. 'Eingabeboxen leeren
    119. Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    120. My.Computer.Audio.Play(My.Resources.button, AudioPlayMode.Background)
    121. Verbotene_Sonderzeichen_für_Ordnernamen_TextBox.Clear()
    122. Sonderzeichenersatz_für_Ordnernamen_TextBox.Clear()
    123. End Sub
    124. 'Eingabeboxen leeren
    125. Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
    126. My.Computer.Audio.Play(My.Resources.button, AudioPlayMode.Background)
    127. Verbotene_Sonderzeichen_für_Dateinamen_TextBox.Clear()
    128. Sonderzeichenersatz_für_Dateinamen_TextBox.Clear()
    129. End Sub
    130. 'Sound CheckBox1
    131. Private Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox1.CheckedChanged
    132. My.Computer.Audio.Play(My.Resources.button, AudioPlayMode.Background)
    133. End Sub
    134. 'Sound CheckBox2
    135. Private Sub CheckBox2_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox2.CheckedChanged
    136. My.Computer.Audio.Play(My.Resources.button, AudioPlayMode.Background)
    137. End Sub
    138. End Class​
    Jo eigentlich gehts hier drum - kurz und bündig .

    VB.NET-Quellcode

    1. Public Function CleanFilename(ByVal sDateiname As String, ByVal Verbotene_Zeichen As String , ByVal Ersatzzeichen As String ) As String
    2. Dim s As String = System.Text.RegularExpressions.Regex.Replace(sFilename, "[" & Verbotene_Zeichen & "]+", Ersatzzeichen)
    3. Return s
    4. End Function


    Aufruf:

    VB.NET-Quellcode

    1. CleanFilename("Ich # könnte***** kotzen das das nicht +++ geht ","# *+"," ")


    So weit so gut - hiermit entferne ich die angegebenen verbotenen Zeichen und ersetze sie mit (( einem )) Ersatzzeichen .Selbst wenn es mehrere hintereinander sind .

    Aber wie tausche ich ohne replace im selben Atemzug - (( Ä Ö Ü ä ö ü )) in (( Ae Ue Oe ae oe ue )) - in der gleichen Funktion ?

    So is es ... :S

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „TVX“ ()

    TVX schrieb:

    noch die Umlaute entfernen
    Dann mach Dir ein Dictionary(Of Char, Char), wo Du die zu ersetzenden und die ersetzenden Zeichen paarst.
    Und dann kannst Du mit einem Replace über alle Keys das ganze fix machen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Es müsste ein Dictionary(Of Char, String), wenn er auch ö durch oe ersetzen können will

    VB.NET-Quellcode

    1. ''' <summary> returnt filename oder einen geeigneteren Dateinamen </summary>
    2. Private Function ProposeFileName(filename As String, replacements As Dictionary(Of Char, String)) As String
    3. Dim pattern = Regex.Escape(String.Concat(replacements.Keys))
    4. Return Regex.Replace(filename, "[" & pattern & "]", Function(mt) replacements(mt.Value(0)))
    5. End Function
    Lol - da habt ihr mir mal wieder was neues an den Kopf geschmissen :D

    Also soll ich ,wenn ich das richtig verstehe ?

    VB.NET-Quellcode

    1. replacements As Dictionary(Of Char, String)

    füllen !


    Ok so weit so lustig ,wenn ich das richtig verstanden habe . :D
    Nun soll das aber unter Umständen variabel bleiben - wenn es geht .

    Muss mich aber erst schlau mache über (( Dictionary(Of Char, String) ))

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „TVX“ ()

    TVX schrieb:

    variabel bleiben
    Du kannst doch das Dictionary füllen womit immer Du willst. Dieses sorgt nur für die richtige Zuordnung der zu ersetzenden mit den zu verwendenden Zeichen / Strings.
    Das könntest Du über ein Menü / Dialog / Settings anbieten, speichern und laden.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Nur der Vollständigkeit halber, hier die Funktion:

    VB.NET-Quellcode

    1. ''' <summary>
    2. ''' Entfernt illegale Zeichen für Dateiname
    3. ''' </summary>
    4. ''' <param name="source">Source String</param>
    5. ''' <returns></returns>
    6. ''' <remarks></remarks>
    7. Private Function ClearInvalidFileNameChars(ByVal source As String) As String
    8. Return New String(source.Where(Function(f) Not IO.Path.GetInvalidFileNameChars.Contains(f)).ToArray)
    9. End Function


    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten
    So komme grad vom laufen , war gesundheitlich etwas angeschlagen muss mich bewegen . :(

    Ok fichz aber das reicht leider nicht ganz aus aus .

    Es geht darum das ich meine Fritzbox - Fritznas als Mediaserver verwende (( FÜR PRIVATE ZWECKE )) für mich
    und meinen besten freund den ich schon seit 28 Jahen kenne - Grundschule !

    Nun hatte ich mir en kleinen ListboxBrowser gemacht der nach einigen Überlegungen nun sehr gut funktioniert
    und nutze den um mir M3U Playlisten von Filmen oder Musik für den VLC Player zu erstellen .

    Seit dem gibt's Doctor Who am Band u.s.w...

    :!: Nun hat die Fritzbox + Vlc so wie andere Netzspeichergeräte einige Bedingungen die zu beachten sind ! :!:

    Umlaute - Leerzeichen - Sonderzeichen und die üblichen Regeln für solche Adressen :!:

    Und da ich nicht auf die Idee kommen würde meine mp3 Sammlung von Hand zu Putzen hatte ich das zuerst mit - replace - gemacht .
    das war aber nicht sehr schön zudem sollten auch Zeichen die sich mehrmals hintereinander wiederholen mit einem Ersatz getauscht werden .

    Grundsätzlich tausche ich aber immer bei Ordnernamen die Leerzeichen mit unterem Trennstrich aus( _ ).
    Und bei Dateinamen werden die Leerzeichen zu Punkten( . ) .

    LG Andre.
    Also momentan hab ich's jetzt so , aber das mit (( Dictionary(Of Char, String)) kratzt mich doch zimlich :/

    Und der Code neigt auch wieder zum rot stich ;(

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Option Strict On
    2. Public Class Form1
    3. 'Speicherdatei für Eingabeboxen
    4. Dim Configuration_Save_Pfad As String = "Sonderzeichen_Cleaner_Configuration_Save.txt"
    5. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    6. 'Prüfen ob Datei schon Exsistiert
    7. If System.IO.File.Exists(Configuration_Save_Pfad) Then
    8. 'Wenn ja gespeicherte Zeile lesen und in die passenden TextBoxen schreiben
    9. Using sr As New IO.StreamReader(Configuration_Save_Pfad)
    10. Verbotene_Sonderzeichen_für_Ordnernamen_TextBox.Text = sr.ReadLine()
    11. Sonderzeichenersatz_für_Ordnernamen_TextBox.Text = sr.ReadLine()
    12. Verbotene_Sonderzeichen_für_Dateinamen_TextBox.Text = sr.ReadLine()
    13. Sonderzeichenersatz_für_Dateinamen_TextBox.Text = sr.ReadLine()
    14. sr.Close()
    15. End Using
    16. End If
    17. End Sub
    18. Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
    19. 'TextBoxen beim schliessen der Form in Datei speichern
    20. Using sw As New IO.StreamWriter(Configuration_Save_Pfad)
    21. sw.WriteLine(Verbotene_Sonderzeichen_für_Ordnernamen_TextBox.Text)
    22. sw.WriteLine(Sonderzeichenersatz_für_Ordnernamen_TextBox.Text)
    23. sw.WriteLine(Verbotene_Sonderzeichen_für_Dateinamen_TextBox.Text)
    24. sw.WriteLine(Sonderzeichenersatz_für_Dateinamen_TextBox.Text)
    25. sw.Close()
    26. End Using
    27. End Sub
    28. 'Fehler auflistung was nicht Umbenannt werden konnte
    29. Dim Fehlerliste_Umbenennung As New List(Of String)
    30. 'Alle Ordnernamen auf dieser Ebene säubern
    31. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    32. My.Computer.Audio.Play(My.Resources.button, AudioPlayMode.Background)
    33. Fehlerliste_Umbenennung.Clear()
    34. Using FolderBrowserDialog1 As New FolderBrowserDialog
    35. If FolderBrowserDialog1.ShowDialog() = DialogResult.OK Then
    36. Button2.Text = "Bitte warten..."
    37. For Each Ordner In My.Computer.FileSystem.GetDirectories(FolderBrowserDialog1.SelectedPath)
    38. Dim Original_Ordnername As String = Ordner.Substring(Ordner.LastIndexOf("\") + 1)
    39. Dim Sauberer_Ordnername As String = Clean_Ordnername(Original_Ordnername, Verbotene_Sonderzeichen_für_Ordnernamen_TextBox.Text, Sonderzeichenersatz_für_Ordnernamen_TextBox.Text)
    40. If Not Original_Ordnername = Sauberer_Ordnername Then
    41. Try
    42. My.Computer.FileSystem.RenameDirectory(Ordner, Sauberer_Ordnername)
    43. Catch ex As Exception
    44. Fehlerliste_Umbenennung.Add(ex.Message.ToString)
    45. End Try
    46. End If
    47. Next
    48. End If
    49. End Using
    50. Button2.Text = "Alle Ordnernamen auf der gewählten Ebene säubern"
    51. My.Computer.Audio.Play(My.Resources.bell, AudioPlayMode.Background)
    52. If Not Fehlerliste_Umbenennung.Count = Nothing Then
    53. Dim Fehler_Info As String = ""
    54. For Each Fehler As String In Fehlerliste_Umbenennung
    55. Fehler_Info &= Fehler & vbNewLine & vbNewLine
    56. Next
    57. MsgBox("ACHTUNG :" & vbNewLine & "Die hier aufgelisteten Dateien konnten nicht umbenannt werden !" & vbNewLine & vbNewLine & Fehler_Info, MsgBoxStyle.Information, "ACHTUNG !")
    58. End If
    59. End Sub
    60. 'Alle Dateinamen auf dieser Ebene säubern
    61. Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
    62. My.Computer.Audio.Play(My.Resources.button, AudioPlayMode.Background)
    63. Using FolderBrowserDialog1 As New FolderBrowserDialog
    64. If FolderBrowserDialog1.ShowDialog() = DialogResult.OK Then
    65. Button4.Text = "Bitte warten..."
    66. For Each Dateie In My.Computer.FileSystem.GetFiles(FolderBrowserDialog1.SelectedPath)
    67. Dim Original_Dateiname As String = IO.Path.GetFileName(Dateie)
    68. Dim Sauberer_Dateiname As String = Clean_Dateiname(Original_Dateiname, Verbotene_Sonderzeichen_für_Dateinamen_TextBox.Text, Sonderzeichenersatz_für_Dateinamen_TextBox.Text)
    69. If Not Original_Dateiname = Sauberer_Dateiname AndAlso Not Sauberer_Dateiname = "" Then
    70. Try
    71. My.Computer.FileSystem.RenameFile(Dateie, Sauberer_Dateiname)
    72. Catch ex As Exception
    73. Fehlerliste_Umbenennung.Add(ex.Message.ToString)
    74. End Try
    75. End If
    76. Next
    77. End If
    78. End Using
    79. Button4.Text = "Alle Dateinamen auf der gewählten Ebene säubern"
    80. My.Computer.Audio.Play(My.Resources.bell, AudioPlayMode.Background)
    81. If Not Fehlerliste_Umbenennung.Count = Nothing Then
    82. Dim Fehler_Info As String = ""
    83. For Each Fehler As String In Fehlerliste_Umbenennung
    84. Fehler_Info &= Fehler & vbNewLine & vbNewLine
    85. Next
    86. MsgBox("ACHTUNG :" & vbNewLine & "Die hier aufgelisteten Dateien konnten nicht umbenannt werden !" & vbNewLine & vbNewLine & Fehler_Info, MsgBoxStyle.Information, "ACHTUNG !")
    87. End If
    88. End Sub
    89. Public Function Clean_Ordnername(ByVal Ordnername As String, ByVal Verbotene_Zeichen As String, ByVal Ersatzzeichen As String) As String
    90. If Button1.Text = "Umlaute entfernen - An" Then
    91. Dim toReplace = {{"ä", "ae"}, {"ö", "oe"}, {"ü", "ue"}, {"Ä", "Aa"}, {"Ö", "Oe"}, {"Ü", "Ue"}, {"ß", "ss"}}
    92. For i = 0 To toReplace.GetLength(0) - 1
    93. Ordnername = Ordnername.Replace(toReplace(i, 0), toReplace(i, 1))
    94. Next
    95. End If
    96. If Verbotene_Zeichen = "" Or Ersatzzeichen = "" Then
    97. Return Ordnername
    98. Else
    99. Return System.Text.RegularExpressions.Regex.Replace(Ordnername, "[" & Verbotene_Zeichen & "]+", Ersatzzeichen)
    100. End If
    101. End Function
    102. Public Function Clean_Dateiname(ByVal Dateiname As String, ByVal Verbotene_Zeichen As String, ByVal Ersatzzeichen As String) As String
    103. If Button3.Text = "Umlaute entfernen - An" Then
    104. Dim toReplace = {{"ä", "ae"}, {"ö", "oe"}, {"ü", "ue"}, {"Ä", "Aa"}, {"Ö", "Oe"}, {"Ü", "Ue"}, {"ß", "ss"}}
    105. For i = 0 To toReplace.GetLength(0) - 1
    106. Dateiname = Dateiname.Replace(toReplace(i, 0), toReplace(i, 1))
    107. Next
    108. End If
    109. If Verbotene_Zeichen = "" Or Ersatzzeichen = "" Then
    110. Return Dateiname
    111. Else
    112. Return System.Text.RegularExpressions.Regex.Replace(Dateiname, "[" & Verbotene_Zeichen & "]+", Ersatzzeichen)
    113. End If
    114. End Function
    115. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    116. My.Computer.Audio.Play(My.Resources.button, AudioPlayMode.Background)
    117. If Button1.Text = "Umlaute entfernen - Aus" Then
    118. Button1.Text = "Umlaute entfernen - An"
    119. Else
    120. Button1.Text = "Umlaute entfernen - Aus"
    121. End If
    122. End Sub
    123. Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    124. My.Computer.Audio.Play(My.Resources.button, AudioPlayMode.Background)
    125. If Button3.Text = "Umlaute entfernen - Aus" Then
    126. Button3.Text = "Umlaute entfernen - An"
    127. Else
    128. Button3.Text = "Umlaute entfernen - Aus"
    129. End If
    130. End Sub
    131. End Class


    Und noch en Herzlichen Dank an (( ErfinderDesRades )) :*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „TVX“ ()

    Sieh' Dir mal bitte die Naming-Guidelines an.
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    also bei meim Ansatz würdest du die ös und üs ebenso in der Datei hinterlegen. Dann diese Datei nicht in Textboxen einlesen, sondern halt ein Dictionary(Of Char, String) damit befüllen (Tipp: Dictionary hat eine .Add-Methode)
    Und alles wäre einheitlich, effizient und sauber abgehandelt.

    Dictionary(Of Char, String) - was gibtsn da zu kratzen? Hastes dir mal im ObjectBrowser angeguckt?
    =O Guten Morgen ... =O

    Ok ich lade dann die Zeichen z.B. aus einer txt .

    z.b:

    Ä=[Ae],Ü=[Ue],Ö=[Oe],?=[]+,-=[_]+

    So erhalte ich dann ne Zuordnung + die Möglichkeit sich wiederholende verbotene Zeichen ,
    bei bedarf auf ein Zeichen zu stutzen .

    Und bleib in der selben Schublade :)

    Lg Andre...

    TVX schrieb:

    Ä=[Ae],Ü=[Ue],Ö=[Oe],?=[]+,-=[_]+
    Wenn Du unter Windows arbeitest, gibt es bereits eine Reihe von Zeichen, die das Betriebssystem als Bestandteil von Pfad- und Dateinamen nicht zulässt, die bräuchtest Du gar nicht erst zu berücksichtigen:

    VB.NET-Quellcode

    1. Dim c1() = IO.Path.GetInvalidFileNameChars
    2. Dim c2() = IO.Path.GetInvalidPathChars
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Stimmt - fichz - hatte mir das oben schon demonstriert ,
    gibts dazu ne liste welche Zeichen davon betroffen sind .

    Bei meinem Test war das Ergebnis ernüchternd :

    Eingabe:
    !""`§$%&/()=?`{[]}\ß#'~+*_-.:;,
    Ausgabe:
    !`§$%&()=`{[]}ß#'~+_-.;,

    LG Andre... :)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    ErfinderDesRades schrieb:

    was anneres als Debuggen
    OK, Du gugst auf die Prozeduren und die Properties, ich auf die Inhalte der Variablen.
    Zusammen müsste das ne mächtige Waffe gegen Fehler sein. :thumbsup:
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!