Wenn Sie nur versuchen zu überprüfen, ob eine Zeichenfolge, die Ihren Dateinamen / Pfad enthält, ungültige Zeichen enthält, besteht die schnellste Methode, die ich gefunden habe, darin, Split()
den Dateinamen in ein Array von Teilen aufzuteilen, wo immer ein ungültiges Zeichen vorhanden ist. Wenn das Ergebnis nur ein Array von 1 ist, gibt es keine ungültigen Zeichen. :-)
var nameToTest = "Best file name \"ever\".txt";
bool isInvalidName = nameToTest.Split(System.IO.Path.GetInvalidFileNameChars()).Length > 1;
var pathToTest = "C:\\My Folder <secrets>\\";
bool isInvalidPath = pathToTest.Split(System.IO.Path.GetInvalidPathChars()).Length > 1;
Ich habe versucht, diese und andere oben erwähnte Methoden 1.000.000 Mal in LinqPad für einen Datei- / Pfadnamen auszuführen.
Die Verwendung Split()
beträgt nur ~ 850 ms.
Die Verwendung Regex("[" + Regex.Escape(new string(System.IO.Path.GetInvalidPathChars())) + "]")
dauert ca. 6 Sekunden.
Die komplizierteren regulären Ausdrücke sind VIEL schlimmer, ebenso wie einige der anderen Optionen, wie die Verwendung der verschiedenen Methoden für die Path
Klasse, um den Dateinamen abzurufen und ihre interne Validierung den Job erledigen zu lassen (höchstwahrscheinlich aufgrund des Overheads der Ausnahmebehandlung).
Zugegeben, es ist nicht sehr häufig, dass Sie 1 Million Dateinamen validieren müssen, daher ist eine einzelne Iteration für die meisten dieser Methoden ohnehin in Ordnung. Aber es ist immer noch ziemlich effizient und effektiv, wenn Sie nur nach ungültigen Zeichen suchen.