Illegale Zeichen aus einem Dateinamen oder Pfad entfernen

 Entwicklung, Hilferuf und Lösung  Kommentare deaktiviert für Illegale Zeichen aus einem Dateinamen oder Pfad entfernen
Mrz 172011
 

Ein Problem das sich bei mir immer mal wieder auftut ist das erstellen einer Datei anhand irgend welcher Daten aus irgend welchen Quellen. Das kann bei einer Applikation ein Feld aus der Datenbank sein. Der Titel eines Buches mit dem man kurz eine Temporäre Datei erstellen will um sie als Attachement einem EMail anzuhängen. Aber um die Datei speichern zu können darf sie keine Sonderzeichen drin haben.

Wenn jetzt das Buch den Titel Mein <”Sonderzeichen”> Buch  hat wird das speichern schon schief gehen. Die “ und <> sind in Dateinamen und Pfadnamen nicht erlaubt.

Sofort baut man sich eine Methode die alle Sonderzeichen entfernt. Aber was sind den nun Sonderzeichen? Jetzt fängt die Suche im Internet an, in der Hoffnung eine Liste mit den ungültigen Zeichen zu finden. Seit dem .NET 2.0 Framework kann man dieses bemühen.

Path.GetInvalidFileNameChars() und Path.GetInvalidPathChars(). Schon muss man sich die Zeichen nicht mehr zusammensuchen.

Ich habe mir kurz mal eine Konsolen-Anwendung zur Demo gemacht. Man sieht hier zwei Möglichkeiten wie man die Sonderzeichen entfernen kann. Die erste Methode, die habe ich im Main auskommentiert (Zeile 19), macht es mit einer klassischen Methode die ab der Zeile 32 implementiert. Die Zweite, die aktive (Zeile 21), macht es mit einer Erweiterungsmethode die ab der Zeile 48 implementiert ist.

#region using

using System;
using System.IO;

#endregion

namespace IllegaleZeichen
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            string folder = Path.GetTempPath();
            string fileName = "Mein <\"Sonderzeichen\"> Buch" + ".txt";

            Console.WriteLine(fileName);

            //string file = Path.Combine(folder, RemoveIlegaleCharackter(fileName));

            string file = Path.Combine(folder, fileName.RemoveIlegaleCharackter());

            using(StreamWriter sw = new StreamWriter(file))
            {
                sw.Write("Tut");
            }

            Console.WriteLine(file);
            Console.Read();
        }

        private static string RemoveIlegaleCharackter(string fileName)
        {
            string illegal = fileName;
            string invalid = new string(Path.GetInvalidFileNameChars()) + new string(Path.GetInvalidPathChars());

            foreach(char c in invalid)
            {
                illegal = illegal.Replace(c.ToString(), "");
            }

            return illegal;
        }
    }

    public static class ExtMeth
    {
        public static string RemoveIlegaleCharackter(this string fileName)
        {
            string illegal = fileName;
            string invalid = new string(Path.GetInvalidFileNameChars()) + new string(Path.GetInvalidPathChars());

            foreach(char c in invalid)
            {
                illegal = illegal.Replace(c.ToString(), "");
            }

            return illegal;
        }
    }
}

Die Datei wird dann mit dem Namen “Mein Sonderzeichen Buch.txt” im Temp-Verzeichnis erstellt.