Ungültige Zeichen aus Dateiname entfernen

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von kafffee.

    Ungültige Zeichen aus Dateiname entfernen

    Hallo Community,

    ich versuche gerade ungültige Zeichen aus einem Dateinamen zu entfernen und mit einem + zu ersetzen. Folgenden Code hab ich geschrieben:

    VB.NET-Quellcode

    1. ​For Each Zeichen In System.IO.Path.GetInvalidFileNameChars
    2. If Dateiname.Contains(Zeichen) Then
    3. Dateiname.Replace(Zeichen, "+")
    4. End If
    5. Next


    Nur komischerweise funktioniert das nicht. In meinem Fall wird ein Doppelpunkt (:)nicht entfernt.

    Hab mir mal die unerlaubten Zeichen auf der Console ausgeben lassen, ein Doppelpunkt ist definitiv dabei...
    Das ist aber ein Einsteigerfehler ;)
    Replace wandelt den String nicht um, sondern gibt einen umgewandelten zurück.
    Dateiname = Dateiname.Replace(Zeichen, "+")

    Das Contains kannst Du weglassen, da Replace bei Nichtauffinden eines Zeichens nichts macht. Zusammenfassend kannst Du also schreiben:
    System.IO.Path.GetInvalidFileNameChars.ToList.ForEach(Sub(x) Dateiname = Dateiname.Replace(x, "+"))
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Moin @kafffee , du willst in diesem Fall ja alle ungültigen Zeichen ersetzen. Pass nur mit Replace auf, wenn du bestimmte Zeichen an einer Position in einer XML-Datei o.ä. ersetzen möchtest. Replace ersetzt alle Vorkommnisse. Such dann in dem Fall mit Dim index as Integer = DeinString.IndexOf("...") und prüfe danach, ob index > -1 ist. Entferne, wie in meinem Beispiel, ein Char, und ersetze es mit einem anderen Char. Geht auch mit Strings.

    VB.NET-Quellcode

    1. Public NotInheritable Class Form1
    2. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    3. Dim stringOrig As String = "Das ist ein String!"
    4. Dim index As Integer = stringOrig.IndexOf("S")
    5. If index > -1 Then
    6. Dim stringInserted As String = stringOrig.Remove(index, 1).Insert(index, "s")
    7. End If
    8. End Sub
    9. End Class

    @kafffee Und:
    Ein Doppelpunkt kommt im Pfad nach dem Laufwerksbuchstaben vor:
    C:\Temp\abc.def
    Wo kommen denn die "falschen" Dateinamen her?
    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!

    VaporiZed schrieb:

    Das ist aber ein Einsteigerfehler

    Oh dann guck ich dass ich so schnell wie möglich nen Haken hinter den Thread setze, nicht dass das noch mehr Leute lesen 8o :P

    VaporiZed schrieb:

    Replace wandelt den String nicht um, sondern gibt einen umgewandelten zurück.

    Okay das leuchtet definitiv ein...

    RodFromGermany schrieb:

    Ein Doppelpunkt kommt im Pfad nach dem Laufwerksbuchstaben vor:

    Yep ich weiss. Es handelt sich um einen Dateinamen ohne Pfad bei mir.

    RodFromGermany schrieb:

    Wo kommen denn die "falschen" Dateinamen her?

    Da mein Projekt unter dem Stern "Ressourcen und Performance schonen" steht, gibt es die Möglichkeit, die CoverArts von Alben nicht in den Metadaten der Audiofiles zu speichern, sondern in eine separate Datei. Also dass man nicht bei einem Album, das 20 Tracks hat, in jeder einzelnen Audidatei dann ein CoverArt speichert. Wenn der Scan nämlich nur etwas höher auflösend ist, dann hat man schnell mehr Bilddatei als Audiodatei in einem Titel..., das dann mal 20...
    Der Dateiname setzt sich aus dem Interpret, einem Unterstrich, und einem Albumnamen und einem ".jpg" zusammen. Deswegen die Bereininging des Dateinamens...

    kafffee schrieb:

    Der Dateiname setzt sich aus dem Interpret, einem Unterstrich, und einem Albumnamen und einem ".jpg" zusammen.
    Da würde ich aber bereits beim Anlegen dieser Sammlung eine Bereinigung durchführen.
    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!
    Wo kommen denn die Namen her, in denen die "Un"-Zeichen enthalten sind?
    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!